// { dg-do compile { target c++17 } } // { dg-options "-fconcepts" } // Check equivalence of short- and longhand declarations. // NB: they are not equivalent in C++20. template concept C = __is_class(T); template concept D = __is_empty(T); struct X { } x; void f1(C auto x); template void f2(T x); void f3(C auto x); template void f4(T x) requires D; template void f5(T x) requires D; template void f6(T x) requires D; template requires C void f1(T x) { } template requires C void f2(T x) { } template void f3(T x) { } template requires C void f4(T x) requires D { } template requires C and D void f5(T x) { } template void f6(T x) requires C and D { } int main() { f1(x); // { dg-error "ambiguous" } f2(x); // { dg-error "ambiguous" } f3(x); // { dg-error "ambiguous" } f4(x); // { dg-error "ambiguous" } f5(x); // { dg-error "ambiguous" } f6(x); // { dg-error "ambiguous" } }