f4a2713ac8
Change-Id: Ia40e9ffdf29b5dab2f122f673ff6802a58bc690f
40 lines
1.4 KiB
C++
40 lines
1.4 KiB
C++
// RUN: %clang_cc1 %s -fsyntax-only -verify -std=c++11
|
|
|
|
// base-clause:
|
|
// : base-specifier-list
|
|
// base-specifier-list:
|
|
// base-specifier ...[opt]
|
|
// base-specifier-list , base-specifier ...[opt]
|
|
// base-specifier:
|
|
// attribute-specifier-seq[opt] base-type-specifier
|
|
// attribute-specifier-seq[opt] virtual access-specifier[opt] base-type-specifier
|
|
// attribute-specifier-seq[opt] access-specifier virtual[opt] base-type-specifier
|
|
// class-or-decltype:
|
|
// nested-name-specifier[opt] class-name
|
|
// decltype-specifier
|
|
// base-type-specifier:
|
|
// class-or-decltype
|
|
// access-specifier:
|
|
// private
|
|
// protected
|
|
// public
|
|
|
|
namespace PR11216 {
|
|
struct Base { };
|
|
struct Derived : decltype(Base()) { };
|
|
|
|
int func();
|
|
struct Derived2 : decltype(func()) { }; // expected-error {{base specifier must name a class}}
|
|
|
|
template<typename T>
|
|
struct Derived3 : decltype(T().foo()) { };
|
|
struct Foo { Base foo(); };
|
|
Derived3<Foo> d;
|
|
|
|
struct Derived4 : :: decltype(Base()) { }; // expected-error {{unexpected namespace scope prior to decltype}}
|
|
|
|
struct Derived5 : PR11216:: decltype(Base()) { }; // expected-error {{unexpected namespace scope prior to decltype}}
|
|
|
|
template<typename T>
|
|
struct Derived6 : typename T::foo { }; // expected-error {{'typename' is redundant; base classes are implicitly types}}
|
|
}
|