// { dg-do compile { target c++2a } } // { dg-additional-options "-fconcepts-ts" } // This tests the terse notation. template concept True = true; template concept False = false; template concept SameAs = __is_same_as(T, U); True x1 = 0; False x2 = 0; // { dg-error "deduced initializer does not satisfy" } void f1(True t) { } void f2(False t) { } void f3(SameAs q) { } void f4(True a, SameAs b) { } True f5() { return 0; } False f6() { return 0; } // { dg-error "deduced return type" } SameAs f7() { return 0; } SameAs f8() { return 'a'; } // { dg-error "deduced return type" } auto f9() -> True { return 0; } auto f10() -> False { return 0; } // { dg-error "deduced return type" } auto f11() -> SameAs { return 0; } auto f12() -> SameAs { return 0; } // { dg-error "deduced return type" } auto f13(int n) -> SameAs { return n; } auto f14(int n) -> SameAs { return 'a'; } // { dg-error "deduced return type" } auto f15(auto x) -> SameAs { return 0; } // { dg-error "deduced return type" } void driver() { f1(0); f2(0); // { dg-error "" } f3(0); f3('a'); // { dg-error "" } f4(0, 0); f4(0, 'a'); // { dg-error "" } f15(0); f15('a'); // { dg-message "" } } template concept bool C1() { return false; } template concept bool C2() { return true; } // { dg-error "cannot be constrained" } template concept bool C3 = true; // { dg-error "cannot be constrained" }