summaryrefslogtreecommitdiff
path: root/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp')
-rw-r--r--test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp24
1 files changed, 16 insertions, 8 deletions
diff --git a/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp b/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp
index d1ad0404ef..5d5361f9c2 100644
--- a/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp
+++ b/test/CXX/temp/temp.constr/temp.constr.decl/class-template-decl.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -std=c++14 -fconcepts-ts -x c++ -verify %s
+// RUN: %clang_cc1 -std=c++2a -x c++ -verify %s
namespace nodiag {
@@ -13,15 +13,15 @@ namespace diag {
template <typename T> requires true // expected-note{{previous template declaration is here}}
struct A;
-template <typename T> struct A; // expected-error{{associated constraints differ in template redeclaration}}
+template <typename T> struct A; // expected-error{{requires clause differs in template redeclaration}}
template <typename T> struct B; // expected-note{{previous template declaration is here}}
-template <typename T> requires true // expected-error{{associated constraints differ in template redeclaration}}
+template <typename T> requires true // expected-error{{requires clause differs in template redeclaration}}
struct B;
template <typename T> requires true // expected-note{{previous template declaration is here}}
struct C;
-template <typename T> requires !0 // expected-error{{associated constraints differ in template redeclaration}}
+template <typename T> requires !0 // expected-error{{requires clause differs in template redeclaration}}
struct C;
} // end namespace diag
@@ -33,7 +33,7 @@ struct AA {
struct A;
};
-template <typename T> requires someFunc(T())
+template <typename U> requires someFunc(U())
struct AA::A { };
struct AAF {
@@ -47,18 +47,26 @@ namespace diag {
template <unsigned N>
struct TA {
- template <template <unsigned> class TT> requires TT<N>::happy // expected-note 2{{previous template declaration is here}}
+ template <template <unsigned> class TT> requires TT<N>::happy // expected-note {{previous template declaration is here}}
struct A;
+ template <template <unsigned> class TT> requires TT<N>::happy // expected-note {{previous template declaration is here}}
+ struct B;
+
struct AF;
};
template <unsigned N>
-template <template <unsigned> class TT> struct TA<N>::A { }; // expected-error{{associated constraints differ in template redeclaration}}
+template <template <unsigned> class TT> struct TA<N>::A { }; // expected-error{{requires clause differs in template redeclaration}}
+
+
+template <unsigned N>
+template <template <unsigned> class TT> requires TT<N + 1>::happy struct TA<N>::B { }; // expected-error{{requires clause differs in template redeclaration}}
template <unsigned N>
struct TA<N>::AF {
- template <template <unsigned> class TT> requires TT<N + 0>::happy // expected-error{{associated constraints differ in template redeclaration}}
+ // we do not expect a diagnostic here because the template parameter list is dependent.
+ template <template <unsigned> class TT> requires TT<N + 0>::happy
friend struct TA::A;
};