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}}
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;
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;
27 constexpr int S::b
= 0; // expected-error 0-1{{redefinition}}
30 constexpr int S::d
= 0;
33 int S::i
; // expected-error {{redefinition}}
34 int S::j
; // expected-error {{redefinition}}
35 const int S::k
; // ok (deprecated)
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}}
46 template<typename T
> constexpr T U
<T
>::d
= T(); // expected-error {{non-literal type 'const NonLit'}}
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}}