2011-10-14 06:29:44 +08:00
// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
2011-09-30 05:28:14 +08:00
int vs = 0 ;
class C {
public :
struct NestedC {
NestedC ( int ) ;
} ;
int i = 0 ;
static int si = 0 ; // expected-error {{non-const static data member must be initialized out of line}}
static const NestedC ci = 0 ; // expected-error {{static data member of type 'const C::NestedC' must be initialized out of line}}
2011-12-30 05:57:33 +08:00
static const int nci = vs ; // expected-error {{in-class initializer for static data member is not a constant expression}}
2011-09-30 05:28:14 +08:00
static const int vi = 0 ;
static const volatile int cvi = 0 ; // expected-error {{static const volatile data member must be initialized out of line}}
} ;
namespace rdar8367341 {
2011-12-19 14:19:21 +08:00
float foo ( ) ; // expected-note {{here}}
2011-09-30 05:28:14 +08:00
struct A {
2011-09-30 08:33:19 +08:00
static const float x = 5.0f ; // expected-warning {{GNU extension}} expected-note {{use 'constexpr' specifier to silence this warning}}
2011-12-30 05:57:33 +08:00
static const float y = foo ( ) ; // expected-warning {{GNU extension}} expected-note {{use 'constexpr' specifier to silence this warning}} expected-error {{in-class initializer for static data member is not a constant expression}}
2011-09-30 05:28:14 +08:00
static constexpr float x2 = 5.0f ;
2011-12-19 14:19:21 +08:00
static constexpr float y2 = foo ( ) ; // expected-error {{must be initialized by a constant expression}} expected-note {{non-constexpr function 'foo'}}
2011-09-30 05:28:14 +08:00
} ;
}