1// RUN: %clang_cc1 -fsyntax-only -verify %s 2 3template<class X> struct A {}; 4 5template<class X> struct B : A<X> { 6 B() : A<X>() {} 7}; 8B<int> x; 9 10template<class X> struct B1 : A<X> { 11 typedef A<X> Base; 12 B1() : Base() {} 13}; 14B1<int> x1; 15 16 17template<typename T> struct Tmpl { }; 18 19template<typename T> struct TmplB { }; 20 21struct TmplC : Tmpl<int> { 22 TmplC() : 23 Tmpl<int>(), 24 TmplB<int>() { } // expected-error {{type 'TmplB<int>' is not a direct or virtual base of 'TmplC'}} 25}; 26 27 28struct TmplD : Tmpl<char>, TmplB<char> { 29 TmplD(): 30 Tmpl<int>(), // expected-error {{type 'Tmpl<int>' is not a direct or virtual base of 'TmplD'}} 31 TmplB<char>() {} 32}; 33 34namespace PR7259 { 35 class Base { 36 public: 37 Base() {} 38 }; 39 40 template <class ParentClass> 41 class Derived : public ParentClass { 42 public: 43 Derived() : Base() {} 44 }; 45 46 class Final : public Derived<Base> { 47 }; 48 49 int 50 main (void) 51 { 52 Final final; 53 return 0; 54 } 55} 56