p1.cpp revision 09048df0b3f472091b2204e531d6b6019244884b
1// 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;
33}
34