// { dg-do run { target c++11 } } int g() { return 0; } template int g(T t, U... u) { return t + g(u...); } template int f1(T... t) { return [t...] { return g(t...); }(); } template int f2(T... t) { return [&t...] { return g(t...); }(); } template int f3(T... t) { return [=] { return g(t...); }(); } template int f4(T... t) { return [&] { return g(t...); }(); } #define assert(E) do { if (!(E)) __builtin_abort(); } while(0) int main() { assert (f1() == 0); assert (f2() == 0); assert (f3() == 0); assert (f4() == 0); assert (f1(42) == 42); assert (f2(42) == 42); assert (f3(42) == 42); assert (f4(42) == 42); assert (f1(1,2,3) == 6); assert (f2(1,2,3) == 6); assert (f3(1,2,3) == 6); assert (f4(1,2,3) == 6); }