aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/cpp2a/lambda-generic-variadic21.C
blob: d6b5656e5dbfc97e1b095899bcd82b0d91313000 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// PR c++/97246
// { dg-do compile { target c++20 } }

template <int... Is, typename T>
T arg_T(decltype(Is)..., T, ...);

template <int I, int... Is>
inline constexpr auto get =
 []<typename... T>(decltype(Is)..., T... v, ...) {
   static_assert( sizeof...(T) == sizeof...(v) );
   if constexpr ( sizeof...(T) == 1 )
     return (v,...);
   else {
     using V = decltype(arg_T<__integer_pack(I)...>(v...));
     return get<I,__integer_pack(I)...>.template operator()<V>(v...);
   }
 };

static_assert( get<0>('\0', short{1}, 2, long{3}) == 0 );