// 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 );