1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- // RUN: %clang_cc1 -std=c++2a -x c++ -verify %s
- namespace nodiag {
- template <typename T> requires bool(T())
- int A();
- template <typename U> requires bool(U())
- int A();
- } // end namespace nodiag
- namespace diag {
- namespace orig {
- template <typename T> requires true
- int A();
- template <typename T>
- int B();
- template <typename T> requires true
- int C();
- }
- template <typename T>
- int orig::A();
- // expected-error@-1{{out-of-line declaration of 'A' does not match any declaration in namespace 'diag::orig'}}
- template <typename T> requires true
- int orig::B();
- // expected-error@-1{{out-of-line declaration of 'B' does not match any declaration in namespace 'diag::orig'}}
- template <typename T> requires !0
- int orig::C();
- // expected-error@-1{{out-of-line declaration of 'C' does not match any declaration in namespace 'diag::orig'}}
- } // end namespace diag
- namespace nodiag {
- struct AA {
- template <typename T> requires someFunc(T())
- int A();
- };
- template <typename T> requires someFunc(T())
- int AA::A() { return sizeof(T); }
- } // end namespace nodiag
- namespace diag {
- template <unsigned N>
- struct TA {
- template <template <unsigned> class TT> requires TT<N>::happy
- int A();
- };
- template <unsigned N>
- template <template <unsigned> class TT> int TA<N>::A() { return sizeof(TT<N>); }
- // expected-error@-1{{out-of-line definition of 'A' does not match any declaration in 'TA<N>'}}
- } // end namespace diag
|