1 // RUN: %clang_cc1 -fsyntax-only -verify %s 2 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s 3 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s 4 5 template<class X> struct A {}; 6 7 template<class X> struct B : A<X> { BB8 B() : A<X>() {} 9 }; 10 B<int> x; 11 12 template<class X> struct B1 : A<X> { 13 typedef A<X> Base; B1B114 B1() : Base() {} 15 }; 16 B1<int> x1; 17 18 19 template<typename T> struct Tmpl { }; 20 21 template<typename T> struct TmplB { }; 22 23 struct TmplC : Tmpl<int> { TmplCTmplC24 TmplC() : 25 Tmpl<int>(), 26 TmplB<int>() { } // expected-error {{type 'TmplB<int>' is not a direct or virtual base of 'TmplC'}} 27 }; 28 29 30 struct TmplD : Tmpl<char>, TmplB<char> { TmplDTmplD31 TmplD(): 32 Tmpl<int>(), // expected-error {{type 'Tmpl<int>' is not a direct or virtual base of 'TmplD'}} 33 TmplB<char>() {} 34 }; 35 36 namespace PR7259 { 37 class Base { 38 public: Base()39 Base() {} 40 }; 41 42 template <class ParentClass> 43 class Derived : public ParentClass { 44 public: Derived()45 Derived() : Base() {} 46 }; 47 48 class Final : public Derived<Base> { 49 }; 50 51 int main(void)52 main (void) 53 { 54 Final final; 55 return 0; 56 } 57 } 58 59 namespace NonDependentError { 60 struct Base { Base(int); }; // expected-note {{candidate constructor not viable}} 61 // expected-note@-1 {{candidate constructor (the implicit copy constructor) not viable}} 62 #if __cplusplus >= 201103L // C++11 or later 63 // expected-note@-3 {{candidate constructor (the implicit move constructor) not viable}} 64 #endif 65 66 template<typename T> 67 struct Derived1 : Base { Derived1NonDependentError::Derived168 Derived1() : Base(1, 2) {} // expected-error {{no matching constructor}} 69 }; 70 71 template<typename T> 72 struct Derived2 : Base { Derived2NonDependentError::Derived273 Derived2() : BaseClass(1) {} // expected-error {{does not name a non-static data member or base}} 74 }; 75 76 Derived1<void> d1; 77 Derived2<void> d2; 78 } 79