// RUN: %clang_cc1 -std=c++20 -verify %s | |
template<class T, class U> | |
concept C = true; | |
class non_temp { | |
template<C<non_temp> T> | |
friend void f(); | |
non_temp(); | |
}; | |
template<C<non_temp> T> | |
void f() { | |
auto v = non_temp(); | |
} | |
template<class A> | |
class temp { | |
template<C<temp> T> | |
friend void g(); // expected-error {{friend declaration with a constraint that depends on an enclosing template parameter must be a definition}} | |
temp(); | |
}; | |
template<C<temp<int>> T> | |
void g() { | |
auto v = temp<T>(); | |
} | |
void h() { | |
f<int>(); | |
g<int>(); | |
} |