1*67e74705SXin Li // RUN: %clang_cc1 %s -fsyntax-only -verify -std=c++11 2*67e74705SXin Li 3*67e74705SXin Li // base-clause: 4*67e74705SXin Li // : base-specifier-list 5*67e74705SXin Li // base-specifier-list: 6*67e74705SXin Li // base-specifier ...[opt] 7*67e74705SXin Li // base-specifier-list , base-specifier ...[opt] 8*67e74705SXin Li // base-specifier: 9*67e74705SXin Li // attribute-specifier-seq[opt] base-type-specifier 10*67e74705SXin Li // attribute-specifier-seq[opt] virtual access-specifier[opt] base-type-specifier 11*67e74705SXin Li // attribute-specifier-seq[opt] access-specifier virtual[opt] base-type-specifier 12*67e74705SXin Li // class-or-decltype: 13*67e74705SXin Li // nested-name-specifier[opt] class-name 14*67e74705SXin Li // decltype-specifier 15*67e74705SXin Li // base-type-specifier: 16*67e74705SXin Li // class-or-decltype 17*67e74705SXin Li // access-specifier: 18*67e74705SXin Li // private 19*67e74705SXin Li // protected 20*67e74705SXin Li // public 21*67e74705SXin Li 22*67e74705SXin Li namespace PR11216 { 23*67e74705SXin Li struct Base { }; 24*67e74705SXin Li struct Derived : decltype(Base()) { }; 25*67e74705SXin Li 26*67e74705SXin Li int func(); 27*67e74705SXin Li struct Derived2 : decltype(func()) { }; // expected-error {{base specifier must name a class}} 28*67e74705SXin Li 29*67e74705SXin Li template<typename T> 30*67e74705SXin Li struct Derived3 : decltype(T().foo()) { }; 31*67e74705SXin Li struct Foo { Base foo(); }; 32*67e74705SXin Li Derived3<Foo> d; 33*67e74705SXin Li 34*67e74705SXin Li struct Derived4 : :: decltype(Base()) { }; // expected-error {{unexpected namespace scope prior to decltype}} 35*67e74705SXin Li 36*67e74705SXin Li struct Derived5 : PR11216:: decltype(Base()) { }; // expected-error {{unexpected namespace scope prior to decltype}} 37*67e74705SXin Li 38*67e74705SXin Li template<typename T> 39*67e74705SXin Li struct Derived6 : typename T::foo { }; // expected-error {{'typename' is redundant; base classes are implicitly types}} 40*67e74705SXin Li } 41