// PR c++/93907 // { dg-options -std=gnu++20 } // This testcase is a variadic version of concepts-using2.C; the only // difference is that 'cd' and 'ce' are now variadic concepts. template struct c { static constexpr int d = a; typedef c e; }; template struct f; template using g = typename f::e; struct b; template struct f { using e = b; }; template struct m { typedef g aj; }; template struct n { typedef typename m::aj e; }; template using an = typename n::e; template constexpr bool ao = c::d; template constexpr bool i = c<1>::d; template concept bb = i; #ifdef __SIZEOF_INT128__ using cc = __int128; #else using cc = long long; #endif template concept cd = bb; template concept ce = requires { requires cd; }; template concept h = ce; template concept l = h; template concept cl = ao; template concept cp = requires(b j) { requires h>; }; struct o { template requires cp auto operator()(b) {} }; template using cm = decltype(o{}(b())); template concept ct = l; template concept dd = ct>; template concept de = dd; struct { template void operator()(da, b); } di; struct p { void begin(); }; template using df = p; template void q() { df k; int d; di(k, d); }