blob: 01893a94cbc94fb9d4852b4365807d4d3ec15bbe [file] [log] [blame]
Hubert Tongec3cb572015-06-25 00:23:39 +00001// RUN: %clang_cc1 -std=c++14 -fconcepts-ts -x c++ %s -verify
2// expected-no-diagnostics
3
4// Test parsing of the optional requires-clause in a template-declaration.
5
6template <typename T> requires true
7void foo() { }
8
9
10template <typename T> requires !0
11struct A {
12 void foo();
13 struct AA;
14 enum E : int;
15 static int x;
16
17 template <typename> requires true
18 void Mfoo();
19
20 template <typename> requires true
21 struct M;
22
23 template <typename> requires true
24 static int Mx;
25
26 template <typename TT> requires true
27 using MQ = M<TT>;
28};
29
30template <typename T> requires !0
31void A<T>::foo() { }
32
33template <typename T> requires !0
34struct A<T>::AA { };
35
36template <typename T> requires !0
37enum A<T>::E : int { E0 };
38
39template <typename T> requires !0
40int A<T>::x = 0;
41
42template <typename T> requires !0
43template <typename> requires true
44void A<T>::Mfoo() { }
45
46template <typename T> requires !0
47template <typename> requires true
48struct A<T>::M { };
49
50template <typename T> requires !0
51template <typename> requires true
52int A<T>::Mx = 0;
53
54
55template <typename T> requires true
56int x = 0;
57
58template <typename T> requires true
59using Q = A<T>;
60
61struct C {
62 template <typename> requires true
63 void Mfoo();
64
65 template <typename> requires true
66 struct M;
67
68 template <typename> requires true
69 static int Mx;
70
71 template <typename T> requires true
72 using MQ = M<T>;
73};
74
75template <typename> requires true
76void C::Mfoo() { }
77
78template <typename> requires true
79struct C::M { };
80
81template <typename> requires true
82int C::Mx = 0;