| // 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 |
| |
| #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@13 {{not an aggregate and has no constexpr constructors}} |
| constexpr B b; // expected-error {{constant expression}} expected-note {{non-constexpr}} |
| // expected-note@9 {{here}} |
| |
| static_assert(plus_seven(3) == 10, ""); |
| |
| #endif |