// PR c++/103105 // { dg-do compile { target c++20 } } template<class...> struct list; template<bool> struct A; template<class T, class... Ts> using wrap = A<1 != (0 + ... + requires { T() = Ts(); })>; template<class... Ts> using type = list<wrap<Ts, Ts...>...>; using ty0 = type<>; using ty0 = list<>; using ty1 = type<int>; using ty1 = list<A<true>>; using ty2 = type<int, int>; using ty2 = list<A<true>, A<true>>; using ty3 = type<int, int, int>; using ty3 = list<A<true>, A<true>, A<true>>;