// { dg-do compile { target c++11 } } #include #define IS_LIT(T) (std::is_literal_type::value) #define SA(X) static_assert (X, #X) #define YES(T) SA(IS_LIT(T)) #define NO(T) SA(!IS_LIT(T)) enum E1 { }; enum class E2 { }; struct Literal {}; struct NotLiteral { ~NotLiteral(); }; YES(int); YES(int[]); YES(int[3]); YES(double); YES(void *); YES(decltype (nullptr)); YES(int Literal::*); YES(void (Literal::*)()); YES(E1); YES(E2); YES(Literal); NO (NotLiteral); YES(NotLiteral *); YES(NotLiteral NotLiteral::*); YES(NotLiteral (NotLiteral::*)(NotLiteral)); struct A { A(const A&) = default; A(int); }; NO(A); // no constexpr ctor other than copy