Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / clang / test / CXX / class / class.static / class.static.data / p3.cpp
blob5640bc30ad4c795c08c84fdd45fbe7253cda8cc7
1 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
2 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++1z %s
4 struct NonLit { // expected-note 3{{no constexpr constructors}}
5 NonLit();
6 };
8 struct S {
9 static constexpr int a = 0;
10 static constexpr int b; // expected-error {{initializ}} expected-note 0-1{{previous}}
12 static constexpr int c = 0;
13 static const int d;
14 static const int d2 = 0;
16 static constexpr double e = 0.0; // ok
17 static const double f = 0.0; // expected-error {{requires 'constexpr' specifier}} expected-note {{add 'constexpr'}}
18 static char *const g = 0; // expected-error {{requires 'constexpr' specifier}}
19 static const NonLit h = NonLit(); // expected-error {{must be initialized out of line}}
21 static inline int i; // expected-note {{previous}} expected-warning 0-1{{extension}}
22 static inline int j; // expected-note {{previous}} expected-warning 0-1{{extension}}
23 static constexpr int k = 0;
26 constexpr int S::a;
27 constexpr int S::b = 0; // expected-error 0-1{{redefinition}}
29 const int S::c;
30 constexpr int S::d = 0;
31 constexpr int S::d2;
33 int S::i; // expected-error {{redefinition}}
34 int S::j; // expected-error {{redefinition}}
35 const int S::k; // ok (deprecated)
37 template<typename T>
38 struct U {
39 static constexpr int a = 0;
40 static constexpr int b; // expected-error {{initializ}}
41 static constexpr NonLit h = NonLit(); // expected-error {{cannot have non-literal type 'const NonLit'}}
42 static constexpr T c = T(); // expected-error {{cannot have non-literal type}}
43 static const T d;
46 template<typename T> constexpr T U<T>::d = T(); // expected-error {{non-literal type 'const NonLit'}}
48 U<int> u1;
49 U<NonLit> u2; // expected-note {{here}}
51 static_assert(U<int>::a == 0, "");
53 constexpr int outofline = (U<NonLit>::d, 0); // expected-note {{here}}