p3-0x.cpp revision 7a614d8380297fcd2bc23986241905d97222948c
1// RUN: %clang_cc1 -std=c++0x -fsyntax-only -verify %s
2
3using X = struct { // ok
4};
5template<typename T> using Y = struct { // expected-error {{can not be defined in a type alias template}}
6};
7
8class K {
9  virtual ~K();
10  // FIXME: the diagnostic here is really bad
11  operator struct S {} (); // expected-error 2{{}} expected-note {{}}
12};
13
14void f() {
15  int arr[3] = {1,2,3};
16
17  for (struct S { S(int) {} } s : arr) { // expected-error {{types may not be defined in a for range declaration}}
18  }
19
20  new struct T {}; // expected-error {{allocation of incomplete type}} expected-note {{forward declaration}}
21
22  // FIXME: the diagnostic here isn't very good
23  try {} catch (struct U {}); // expected-error 3{{}} expected-note 2{{}}
24
25  (void)(struct V { V(int); })0; // expected-error {{'V' can not be defined in a type specifier}}
26
27  (void)dynamic_cast<struct W {}*>((K*)0); // expected-error {{'W' can not be defined in a type specifier}}
28  (void)static_cast<struct X {}*>(0); // expected-error {{'X' can not be defined in a type specifier}}
29  (void)reinterpret_cast<struct Y {}*>(0); // expected-error {{'Y' can not be defined in a type specifier}}
30  (void)const_cast<struct Z {}*>((const Z*)0); // expected-error {{'Z' can not be defined in a type specifier}}
31}
32
33void g() throw (struct Ex {}) { // expected-error {{'Ex' can not be defined in a type specifier}}
34}
35
36// FIXME: this currently gives a strange error because alignas is not recognised as a keyword yet.
37int alignas(struct Aa {}) x; // expected-error {{'Aa' can not be defined in a parameter type}} expected-error {{expected function body}}
38
39int a = sizeof(struct So {}); // expected-error {{'So' can not be defined in a type specifier}}
40int b = alignof(struct Ao {}); // expected-error {{'Ao' can not be defined in a type specifier}}
41
42namespace std { struct type_info; }
43const std::type_info &ti = typeid(struct Ti {}); // expected-error {{'Ti' can not be defined in a type specifier}}
44