1*67e74705SXin Li // RUN: %clang_cc1 -pedantic-errors -std=c++11 -emit-pch %s -o %t 2*67e74705SXin Li // RUN: %clang_cc1 -pedantic-errors -std=c++11 -include-pch %t -verify %s 3*67e74705SXin Li 4*67e74705SXin Li #ifndef HEADER_INCLUDED 5*67e74705SXin Li 6*67e74705SXin Li #define HEADER_INCLUDED 7*67e74705SXin Li 8*67e74705SXin Li struct B { 9*67e74705SXin Li B(); BB10*67e74705SXin Li constexpr B(char) {} 11*67e74705SXin Li }; 12*67e74705SXin Li 13*67e74705SXin Li struct C { 14*67e74705SXin Li B b; 15*67e74705SXin Li double d = 0.0; 16*67e74705SXin Li }; 17*67e74705SXin Li 18*67e74705SXin Li struct D : B { DD19*67e74705SXin Li constexpr D(int n) : B('x'), k(2*n+1) {} 20*67e74705SXin Li int k; 21*67e74705SXin Li }; 22*67e74705SXin Li 23*67e74705SXin Li constexpr int value = 7; 24*67e74705SXin Li 25*67e74705SXin Li template<typename T> plus_seven(T other)26*67e74705SXin Liconstexpr T plus_seven(T other) { 27*67e74705SXin Li return value + other; 28*67e74705SXin Li } 29*67e74705SXin Li 30*67e74705SXin Li #else 31*67e74705SXin Li 32*67e74705SXin Li static_assert(D(4).k == 9, ""); f(C c)33*67e74705SXin Liconstexpr int f(C c) { return 0; } // expected-error {{not a literal type}} 34*67e74705SXin Li // expected-note@13 {{not an aggregate and has no constexpr constructors}} 35*67e74705SXin Li constexpr B b; // expected-error {{constant expression}} expected-note {{non-constexpr}} 36*67e74705SXin Li // expected-note@9 {{here}} 37*67e74705SXin Li 38*67e74705SXin Li static_assert(plus_seven(3) == 10, ""); 39*67e74705SXin Li 40*67e74705SXin Li #endif 41