25 lines
		
	
	
		
			479 B
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			25 lines
		
	
	
		
			479 B
		
	
	
	
		
			C++
		
	
	
	
// RUN: %clang_cc1 -triple=x86_64-linux-gnu -emit-llvm -o - %s
 | 
						|
 | 
						|
// Don't crash if the argument to __builtin_constant_p isn't scalar.
 | 
						|
template <typename T>
 | 
						|
constexpr bool is_constant(const T v) {
 | 
						|
  return __builtin_constant_p(v);
 | 
						|
}
 | 
						|
 | 
						|
template <typename T>
 | 
						|
class numeric {
 | 
						|
 public:
 | 
						|
  using type = T;
 | 
						|
 | 
						|
  template <typename S>
 | 
						|
  constexpr numeric(S value)
 | 
						|
      : value_(static_cast<T>(value)) {}
 | 
						|
 | 
						|
 private:
 | 
						|
  const T value_;
 | 
						|
};
 | 
						|
 | 
						|
bool bcp() {
 | 
						|
  return is_constant(numeric<int>(1));
 | 
						|
}
 |