forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			30 lines
		
	
	
		
			892 B
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			30 lines
		
	
	
		
			892 B
		
	
	
	
		
			C++
		
	
	
	
| // RUN: %clang_cc1 -std=c++17 -verify %s
 | |
| // expected-no-diagnostics
 | |
| template<bool> struct DominatorTreeBase {
 | |
|   static constexpr bool IsPostDominator = true;
 | |
| };
 | |
| extern template class DominatorTreeBase<false>;
 | |
| constexpr bool k = DominatorTreeBase<false>::IsPostDominator;
 | |
| 
 | |
| namespace CompleteType {
 | |
|   template<unsigned N> constexpr int f(const bool (&)[N]) { return 0; }
 | |
| 
 | |
|   template<bool ...V> struct X {
 | |
|     static constexpr bool arr[] = {V...};
 | |
|     static constexpr int value = f(arr);
 | |
|   };
 | |
| 
 | |
|   constexpr int n = X<true>::value;
 | |
| }
 | |
| 
 | |
| template <typename T> struct A {
 | |
|   static const int n;
 | |
|   static const int m;
 | |
|   constexpr int f() { return n; }
 | |
|   constexpr int g() { return n; }
 | |
| };
 | |
| template <typename T> constexpr int A<T>::n = sizeof(A) + sizeof(T);
 | |
| template <typename T> inline constexpr int A<T>::m = sizeof(A) + sizeof(T);
 | |
| static_assert(A<int>().f() == 5);
 | |
| static_assert(A<int>().g() == 5);
 |