// { dg-do compile { target c++20 } } template concept C1 = requires { typename T::type; } && T::type::value; template concept C2 = requires { typename T::Type; requires T::Type::value; }; template requires (!C1) void f1() { } template requires (!C2) void f2() { } struct S { }; void test() { f1(); f2(); } // ------------------ template concept C = requires (T t) { t.f(); }; template requires (!(C && C)) void g1() { } template requires (!C || !C) void g2() { } struct X { void f(); }; void test2() { g1(); // { dg-error "" } g2(); // { dg-error "" } }