|  | // RUN: %clang_cc1 -pedantic-errors -std=c++11 -emit-pch %s -o %t | 
|  | // RUN: %clang_cc1 -pedantic-errors -std=c++11 -include-pch %t -verify %s | 
|  |  | 
|  | // RUN: %clang_cc1 -pedantic-errors -std=c++11 -emit-pch -fpch-instantiate-templates %s -o %t | 
|  | // RUN: %clang_cc1 -pedantic-errors -std=c++11 -include-pch %t -verify %s | 
|  |  | 
|  | #ifndef HEADER_INCLUDED | 
|  |  | 
|  | #define HEADER_INCLUDED | 
|  |  | 
|  | struct B { | 
|  | B(); | 
|  | constexpr B(char) {} | 
|  | }; | 
|  |  | 
|  | struct C { | 
|  | B b; | 
|  | double d = 0.0; | 
|  | }; | 
|  |  | 
|  | struct D : B { | 
|  | constexpr D(int n) : B('x'), k(2*n+1) {} | 
|  | int k; | 
|  | }; | 
|  |  | 
|  | constexpr int value = 7; | 
|  |  | 
|  | template<typename T> | 
|  | constexpr T plus_seven(T other) { | 
|  | return value + other; | 
|  | } | 
|  |  | 
|  | #else | 
|  |  | 
|  | static_assert(D(4).k == 9, ""); | 
|  | constexpr int f(C c) { return 0; } // expected-error {{not a literal type}} | 
|  | // expected-note@16 {{not an aggregate and has no constexpr constructors}} | 
|  | constexpr B b; // expected-error {{constant expression}} expected-note {{non-constexpr}} | 
|  | // expected-note@12 {{here}} | 
|  |  | 
|  | static_assert(plus_seven(3) == 10, ""); | 
|  |  | 
|  | #endif |