brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.4 KiB · dc5cb2b Raw
41 lines · cpp
1// RUN: %clang_cc1 %s -fsyntax-only -verify -std=c++112 3// base-clause:4//         : base-specifier-list5// base-specifier-list:6//         base-specifier ...[opt]7//         base-specifier-list , base-specifier ...[opt]8// base-specifier:9//         attribute-specifier-seq[opt] base-type-specifier10//         attribute-specifier-seq[opt] virtual access-specifier[opt] base-type-specifier11//         attribute-specifier-seq[opt] access-specifier virtual[opt] base-type-specifier12// class-or-decltype:13//         nested-name-specifier[opt] class-name14//         decltype-specifier15// base-type-specifier:16//         class-or-decltype17// access-specifier:18//         private19//         protected20//         public21 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  struct Derived4 : :: decltype(Base()) { }; // expected-error {{unexpected namespace scope prior to decltype}}35 36  struct Derived5 : PR11216:: decltype(Base()) { }; // expected-error {{unexpected namespace scope prior to decltype}}37 38  template<typename T>39  struct Derived6 : typename T::foo { }; // expected-error {{'typename' is redundant; base classes are implicitly types}}40}41