1 // RUN: %clang_cc1 -fsyntax-only -verify -Wc++11-compat %s
2 // RUN: %clang_cc1 -fsyntax-only -verify -Wc++11-compat %s -std=c++98
5 auto int errx
; // expected-error {{storage class specified for a member declaration}}
6 #if __cplusplus <= 199711L
7 // expected-warning@-2 {{'auto' storage class specifier is redundant}}
9 // expected-warning@-4 {{'auto' storage class specifier is not permitted in C++11, and will not be supported in future releases}}
11 register int erry
; // expected-error {{storage class specified for a member declaration}}
12 extern int errz
; // expected-error {{storage class specified for a member declaration}}
16 this->x
= 0; // expected-error {{invalid use of 'this' outside of a non-static member function}}
17 x
= 0; // expected-error {{invalid use of member 'x' in static member function}}
25 x
= 0; // expected-error {{use of non-static data member 'x' of 'C' from nested type 'NestedC'}}
27 m(); // expected-error {{call to non-static member function 'm' of 'C' from nested type 'NestedC'}}
33 typedef int E
: 1; // expected-error {{typedef member 'E' cannot be a bit-field}}
34 static int sb
: 1; // expected-error {{static member 'sb' cannot be a bit-field}}
40 func btm
: 1; // expected-error {{bit-field 'btm' has non-integral type}}
41 NestedC bc
: 1; // expected-error {{bit-field 'bc' has non-integral type}}
46 #if __cplusplus <= 199711L
47 // expected-warning@-2 {{default member initializer for non-static data member is a C++11 extension}}
49 static int si
= 0; // expected-error {{non-const static data member must be initialized out of line}}
50 static const NestedC ci
= 0; // expected-error {{static data member of type 'const C::NestedC' must be initialized out of line}}
51 static const int nci
= vs
; // expected-error {{in-class initializer for static data member is not a constant expression}}
52 static const int vi
= 0;
53 static const volatile int cvi
= 0; // ok, illegal in C++11
54 #if __cplusplus >= 201103L
55 // expected-error@-2 {{static const volatile data member must be initialized out of line}}
57 static const E evi
= 0;
63 this = 0; // expected-error {{expression is not assignable}}
68 return p
+ x
+ this->y
+ z
;
73 virtual int viv
; // expected-error {{'virtual' can only appear on non-static member functions}}
74 virtual static int vsif(); // expected-error {{'virtual' can only appear on non-static member functions}}
82 mutable int &mir
; // expected-error {{'mutable' cannot be applied to references}}
83 mutable void mfn(); // expected-error {{'mutable' cannot be applied to functions}}
84 mutable const int mci
; // expected-error {{'mutable' and 'const' cannot be mixed}}
86 static const int number
= 50;
87 static int arr
[number
];
94 int m() { return lx
; }
97 int m() { return lx
; }
108 const C3 c3
= { 1, 2 };
109 (void)static_cast<int*>(&c3
.i
); // expected-error {{static_cast from 'const int *' to 'int *' is not allowed}}
111 (void)static_cast<int*>(&c3
.j
);
114 // Play with mutable a bit more, to make sure it doesn't crash anything.
115 mutable int gi
; // expected-error {{'mutable' can only be applied to member variables}}
116 mutable void gfn(); // expected-error {{illegal storage class on function}}
119 mutable int ml
; // expected-error {{'mutable' can only be applied to member variables}}
121 // PR3020: This used to crash due to double ownership of C4.
123 C4
; // expected-warning {{declaration does not declare anything}}
127 void f(); // expected-note{{previous declaration is here}}
128 int f
; // expected-error{{duplicate member 'f'}}
131 // PR5415 - don't hang!
134 void f(); // expected-note 1 {{previous declaration}} expected-note {{previous declaration}}
135 void S::f() {} // expected-error {{extra qualification on member}} expected-error {{class member cannot be redeclared}}
136 void f() {} // expected-error {{class member cannot be redeclared}}
139 // Don't crash on this bogus code.
141 template<class T1
, class T2
> struct foo
:
142 bogus
<foo
<T1
,T2
> > // expected-error {{no template named 'bogus'}}
145 template<> struct foo
<unknown
,unknown
> { // expected-error {{undeclared identifier 'unknown'}}
146 template <typename U1
, typename U2
> struct bar
{
148 static const int value
= 0;
154 class EnclosingClass
{
156 struct A
{ } mutable *member
;
159 void f(const EnclosingClass
&ec
) {
170 enum { x
= sizeof(i
) };
171 enum { y
= sizeof(a
) };
176 namespace rdar8066414
{
179 } // expected-error{{expected ';' after class}}
182 namespace rdar8367341
{
184 #if __cplusplus >= 201103L
185 // expected-note@-2 {{declared here}}
189 #if __cplusplus <= 199711L
190 static const float x
= 5.0f
; // expected-warning {{in-class initializer for static data member of type 'const float' is a GNU extension}}
191 static const float y
= foo(); // expected-warning {{in-class initializer for static data member of type 'const float' is a GNU extension}} expected-error {{in-class initializer for static data member is not a constant expression}}
193 static constexpr float x
= 5.0f
;
194 static constexpr float y
= foo(); // expected-error {{constexpr variable 'y' must be initialized by a constant expression}} expected-note {{non-constexpr function 'foo' cannot be used in a constant expression}}
199 namespace with_anon
{
207 S::c
; // expected-error {{invalid use of non-static data member}}
212 static int const PR9989_Member
= sizeof PR9989_Member
;