blob: dcbe63fd09a718d70bd75fd8ccfcc8a21bdf36f4 [file] [log] [blame]
David Blaikie09048df2011-10-25 15:01:20 +00001// RUN: %clang_cc1 %s -fsyntax-only -verify -std=c++11
2
3// base-clause:
4// : base-specifier-list
5// base-specifier-list:
6// base-specifier ...[opt]
7// base-specifier-list , base-specifier ...[opt]
8// base-specifier:
9// attribute-specifier-seq[opt] base-type-specifier
10// attribute-specifier-seq[opt] virtual access-specifier[opt] base-type-specifier
11// attribute-specifier-seq[opt] access-specifier virtual[opt] base-type-specifier
12// class-or-decltype:
13// nested-name-specifier[opt] class-name
14// decltype-specifier
15// base-type-specifier:
16// class-or-decltype
17// access-specifier:
18// private
19// protected
20// public
21
22namespace PR11216 {
23 struct Base { };
24 struct Derived : decltype(Base()) { };
25
26 int func();
27 struct Derived2 : decltype(func()) { }; // expected-error {{base specifier must name a class}}
28
29 template<typename T>
30 struct Derived3 : decltype(T().foo()) { };
31 struct Foo { Base foo(); };
32 Derived3<Foo> d;
David Blaikie22216eb2011-10-25 17:10:12 +000033
34 struct Derived4 : :: decltype(Base()) { }; // expected-error {{expected class name}}
35
36 struct Derived5 : PR11216:: decltype(Base()) { }; // expected-error {{expected class name}}
David Blaikie09048df2011-10-25 15:01:20 +000037}