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);
 |