// RUN: %clang_cc1 -fsyntax-only -verify %s
// RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s
// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
template<class X>structA{};template<class X>structB:A<X>{B():A<X>(){}};
B<int> x;template<class X>structB1:A<X>{typedef A<X>Base;B1():Base(){}};
B1<int> x1;template<typename T>structTmpl{};template<typename T>structTmplB{};structTmplC:Tmpl<int>{TmplC():Tmpl<int>(),TmplB<int>(){}// expected-error {{type 'TmplB<int>' is not a direct or virtual base of 'TmplC'}}
};structTmplD:Tmpl<char>,TmplB<char>{TmplD():Tmpl<int>(),// expected-error {{type 'Tmpl<int>' is not a direct or virtual base of 'TmplD'}}
TmplB<char>(){}};namespacePR7259{classBase{public:Base(){}};template<class ParentClass>classDerived:publicParentClass{public:Derived():Base(){}};classFinal:publicDerived<Base>{};intmain (void){
Final final;return0;}}namespaceNonDependentError{structBase{Base(int);};// expected-note {{candidate constructor not viable}}
// expected-note@-1 {{candidate constructor (the implicit copy constructor) not viable}}
#if __cplusplus >= 201103L // C++11 or later// expected-note@-3 {{candidate constructor (the implicit move constructor) not viable}}
#endiftemplate<typename T>structDerived1:Base{Derived1():Base(1,2){}// expected-error {{no matching constructor}}
};template<typename T>structDerived2:Base{Derived2():BaseClass(1){}// expected-error {{does not name a non-static data member or base}}
};
Derived1<void> d1;
Derived2<void> d2;}