1 // { dg-do compile { target c++2a } } 2 3 template<typename T> requires(T t)4 concept Eq = requires(T t) { t == t; }; // { dg-message "in requirements" } 5 6 struct Nt { fNt7 template<Eq T> friend void f(T) { } 8 } nt; 9 10 template<typename T> struct S; 11 12 template<Eq T> 13 void proc(S<T>*); 14 15 template<typename T> 16 struct S { 17 friend bool operator==(S, S) requires Eq<T> { return true; } 18 19 friend void proc<>(S*); // { dg-error "does not match any template declaration" } 20 }; 21 22 struct X { } x; 23 main()24int main() { 25 // f(0); // OK 26 f(nt); // { dg-error "" } 27 f(x); // { dg-error "3:'f' was not declared" } 28 29 S<int> si; 30 si == si; // OK 31 32 S<X> sx; 33 sx == sx; // { dg-error "no match" } 34 } 35