1 // PR c++/65949 2 // { dg-do compile { target c++14 } } 3 4 #include <initializer_list> 5 6 template<class T, class... Ts> 7 struct Over : T, Over<Ts...>::type 8 { 9 using type = Over; 10 OverOver11 Over(T f1, Ts... f2) 12 : T(f1), Over<Ts...>::type(f2...) 13 { 14 } 15 16 using T::operator(); 17 using Over<Ts...>::type::operator(); 18 }; 19 20 template<class T> 21 struct Over<T> : T 22 { 23 using type = T; 24 using T::operator(); 25 }; 26 27 template <class... Lambdas> 28 auto CreateLambdas(Lambdas... lambdas) 29 { 30 return Over<Lambdas...>(lambdas...); 31 } 32 33 int main() 34 { 35 auto mesLambda = CreateLambdas 36 ( 37 []() 38 { 39 40 }, 41 42 [](auto i) 43 { 44 (void)i; 45 }, 46 47 [](auto... args) 48 { 49 auto list = {args...}; 50 51 for(auto &&a : list) 52 (void)a; 53 54 return 3; 55 } 56 ); 57 58 mesLambda(); 59 mesLambda(1); 60 mesLambda(12,24,36,48); 61 } 62