xref: /aosp_15_r20/external/clang/test/Parser/cxx-concept-declaration.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li 
2*67e74705SXin Li // Support parsing of function concepts and variable concepts
3*67e74705SXin Li 
4*67e74705SXin Li // RUN:  %clang_cc1 -std=c++14 -fconcepts-ts -x c++ -verify %s
5*67e74705SXin Li 
6*67e74705SXin Li template<typename T> concept bool C1 = true;
7*67e74705SXin Li 
C2()8*67e74705SXin Li template<typename T> concept bool C2() { return true; }
9*67e74705SXin Li 
10*67e74705SXin Li template<typename T>
11*67e74705SXin Li struct A { typedef bool Boolean; };
12*67e74705SXin Li 
13*67e74705SXin Li template<int N>
14*67e74705SXin Li A<void>::Boolean concept C3(!0);
15*67e74705SXin Li 
16*67e74705SXin Li template<typename T, int = 0>
C4(void)17*67e74705SXin Li concept auto C4(void) -> bool { return true; }
18*67e74705SXin Li 
19*67e74705SXin Li constexpr int One = 1;
20*67e74705SXin Li 
21*67e74705SXin Li template <typename>
22*67e74705SXin Li static concept decltype(!0) C5 { bool(One) };
23*67e74705SXin Li 
24*67e74705SXin Li template<typename T> concept concept bool C6 = true; // expected-warning {{duplicate 'concept' declaration specifier}}
25*67e74705SXin Li 
C7()26*67e74705SXin Li template<typename T> concept concept bool C7() { return true; } // expected-warning {{duplicate 'concept' declaration specifier}}
27*67e74705SXin Li 
28*67e74705SXin Li template<concept T> concept bool D1 = true; // expected-error {{unknown type name 'T'}}
29