forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			83 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
| // 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;
 |