aboutsummaryrefslogtreecommitdiff
path: root/test/Parser/cxx-concepts-requires-clause.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/Parser/cxx-concepts-requires-clause.cpp')
-rw-r--r--test/Parser/cxx-concepts-requires-clause.cpp82
1 files changed, 82 insertions, 0 deletions
diff --git a/test/Parser/cxx-concepts-requires-clause.cpp b/test/Parser/cxx-concepts-requires-clause.cpp
new file mode 100644
index 000000000000..01893a94cbc9
--- /dev/null
+++ b/test/Parser/cxx-concepts-requires-clause.cpp
@@ -0,0 +1,82 @@
+// RUN: %clang_cc1 -std=c++14 -fconcepts-ts -x c++ %s -verify
+// expected-no-diagnostics
+
+// Test parsing of the optional requires-clause in a template-declaration.
+
+template <typename T> requires true
+void foo() { }
+
+
+template <typename T> requires !0
+struct A {
+ void foo();
+ struct AA;
+ enum E : int;
+ static int x;
+
+ template <typename> requires true
+ void Mfoo();
+
+ template <typename> requires true
+ struct M;
+
+ template <typename> requires true
+ static int Mx;
+
+ template <typename TT> requires true
+ using MQ = M<TT>;
+};
+
+template <typename T> requires !0
+void A<T>::foo() { }
+
+template <typename T> requires !0
+struct A<T>::AA { };
+
+template <typename T> requires !0
+enum A<T>::E : int { E0 };
+
+template <typename T> requires !0
+int A<T>::x = 0;
+
+template <typename T> requires !0
+template <typename> requires true
+void A<T>::Mfoo() { }
+
+template <typename T> requires !0
+template <typename> requires true
+struct A<T>::M { };
+
+template <typename T> requires !0
+template <typename> requires true
+int A<T>::Mx = 0;
+
+
+template <typename T> requires true
+int x = 0;
+
+template <typename T> requires true
+using Q = A<T>;
+
+struct C {
+ template <typename> requires true
+ void Mfoo();
+
+ template <typename> requires true
+ struct M;
+
+ template <typename> requires true
+ static int Mx;
+
+ template <typename T> requires true
+ using MQ = M<T>;
+};
+
+template <typename> requires true
+void C::Mfoo() { }
+
+template <typename> requires true
+struct C::M { };
+
+template <typename> requires true
+int C::Mx = 0;