1a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor// RUN: %clang_cc1 -fsyntax-only -std=c++11 %s -verify 20d8e9646bc000bab521ce52ed294209a92298cefRichard Smith// RUN: %clang_cc1 -fsyntax-only -std=c++1y %s -verify 3a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor 4a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregorvoid print(); 5a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor 6a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregortemplate<typename T, typename... Ts> 7a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregorvoid print(T first, Ts... rest) { 8a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor (void)first; 9a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor print(rest...); 10a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor} 11a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor 12a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregortemplate<typename... Ts> 13612409ece080e814f79e06772c690d603f45fbd6Richard Smithvoid unexpanded_capture(Ts ...values) { 14612409ece080e814f79e06772c690d603f45fbd6Richard Smith auto unexp = [values] {}; // expected-error{{initializer contains unexpanded parameter pack 'values'}} 15a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor} 16a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor 17a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregortemplate<typename... Ts> 18a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregorvoid implicit_capture(Ts ...values) { 19a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor auto implicit = [&] { print(values...); }; 20a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor implicit(); 21a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor} 22a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor 23a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregortemplate<typename... Ts> 24a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregorvoid do_print(Ts... values) { 25a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor auto bycopy = [values...]() { print(values...); }; 26a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor bycopy(); 27a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor auto byref = [&values...]() { print(values...); }; 28a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor byref(); 29a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor 30a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor auto bycopy2 = [=]() { print(values...); }; 31a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor bycopy2(); 32a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor auto byref2 = [&]() { print(values...); }; 33a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor byref2(); 34a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor} 35a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor 36a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregortemplate void do_print(int, float, double); 37a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor 38a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregortemplate<typename T, int... Values> 39a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregorvoid bogus_expansions(T x) { 40a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor auto l1 = [x...] {}; // expected-error{{pack expansion does not contain any unexpanded parameter packs}} 41a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor auto l2 = [Values...] {}; // expected-error{{'Values' in capture list does not name a variable}} 42a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor} 43a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor 44a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregorvoid g(int*, float*, double*); 45a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor 46a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregortemplate<class... Args> 47a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregorvoid std_example(Args... args) { 48a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor auto lm = [&, args...] { return g(args...); }; 49a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor}; 50a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor 51a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregortemplate void std_example(int*, float*, double*); 52a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor 53a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregortemplate<typename ...Args> 54a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregorvoid variadic_lambda(Args... args) { 55a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor auto lambda = [](Args... inner_args) { return g(inner_args...); }; 56a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor lambda(args...); 57a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor} 58a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregor 59a73652465bcc4c0f6cb7d933ad84e002b527a643Douglas Gregortemplate void variadic_lambda(int*, float*, double*); 600d8e9646bc000bab521ce52ed294209a92298cefRichard Smith 610d8e9646bc000bab521ce52ed294209a92298cefRichard Smithtemplate<typename ...Args> 620d8e9646bc000bab521ce52ed294209a92298cefRichard Smithvoid init_capture_pack_err(Args ...args) { 630d8e9646bc000bab521ce52ed294209a92298cefRichard Smith [as(args)...] {} (); // expected-error {{expected ','}} 640d8e9646bc000bab521ce52ed294209a92298cefRichard Smith [as...(args)]{} (); // expected-error {{expected ','}} 650d8e9646bc000bab521ce52ed294209a92298cefRichard Smith} 660d8e9646bc000bab521ce52ed294209a92298cefRichard Smith 670d8e9646bc000bab521ce52ed294209a92298cefRichard Smithtemplate<typename ...Args> 680d8e9646bc000bab521ce52ed294209a92298cefRichard Smithvoid init_capture_pack_multi(Args ...args) { 690d8e9646bc000bab521ce52ed294209a92298cefRichard Smith [as(args...)] {} (); // expected-error {{initializer missing}} expected-error {{multiple}} 700d8e9646bc000bab521ce52ed294209a92298cefRichard Smith} 710d8e9646bc000bab521ce52ed294209a92298cefRichard Smithtemplate void init_capture_pack_multi(); // expected-note {{instantiation}} 720d8e9646bc000bab521ce52ed294209a92298cefRichard Smithtemplate void init_capture_pack_multi(int); 730d8e9646bc000bab521ce52ed294209a92298cefRichard Smithtemplate void init_capture_pack_multi(int, int); // expected-note {{instantiation}} 740d8e9646bc000bab521ce52ed294209a92298cefRichard Smith 750d8e9646bc000bab521ce52ed294209a92298cefRichard Smithtemplate<typename ...Args> 760d8e9646bc000bab521ce52ed294209a92298cefRichard Smithvoid init_capture_pack_outer(Args ...args) { 770d8e9646bc000bab521ce52ed294209a92298cefRichard Smith print([as(args)] { return sizeof(as); } () ...); 780d8e9646bc000bab521ce52ed294209a92298cefRichard Smith} 790d8e9646bc000bab521ce52ed294209a92298cefRichard Smithtemplate void init_capture_pack_outer(); 800d8e9646bc000bab521ce52ed294209a92298cefRichard Smithtemplate void init_capture_pack_outer(int); 810d8e9646bc000bab521ce52ed294209a92298cefRichard Smithtemplate void init_capture_pack_outer(int, int); 82