1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -fsyntax-only -verify %s 2961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian 3961743326fd18776f897bf4461345dba680ef637Fariborz Jahaniantemplate<class X> struct A {}; 4961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian 5961743326fd18776f897bf4461345dba680ef637Fariborz Jahaniantemplate<class X> struct B : A<X> { 6961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian B() : A<X>() {} 7961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian}; 8961743326fd18776f897bf4461345dba680ef637Fariborz JahanianB<int> x; 9961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian 10961743326fd18776f897bf4461345dba680ef637Fariborz Jahaniantemplate<class X> struct B1 : A<X> { 11961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian typedef A<X> Base; 12961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian B1() : Base() {} 13961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian}; 14961743326fd18776f897bf4461345dba680ef637Fariborz JahanianB1<int> x1; 15961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian 16961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian 17961743326fd18776f897bf4461345dba680ef637Fariborz Jahaniantemplate<typename T> struct Tmpl { }; 18961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian 19961743326fd18776f897bf4461345dba680ef637Fariborz Jahaniantemplate<typename T> struct TmplB { }; 20961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian 21961743326fd18776f897bf4461345dba680ef637Fariborz Jahanianstruct TmplC : Tmpl<int> { 22961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian TmplC() : 23961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian Tmpl<int>(), 24961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian TmplB<int>() { } // expected-error {{type 'TmplB<int>' is not a direct or virtual base of 'TmplC'}} 25961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian}; 26961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian 27961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian 28961743326fd18776f897bf4461345dba680ef637Fariborz Jahanianstruct TmplD : Tmpl<char>, TmplB<char> { 29961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian TmplD(): 30961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian Tmpl<int>(), // expected-error {{type 'Tmpl<int>' is not a direct or virtual base of 'TmplD'}} 31961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian TmplB<char>() {} 32961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian}; 33961743326fd18776f897bf4461345dba680ef637Fariborz Jahanian 343956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregornamespace PR7259 { 353956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor class Base { 363956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor public: 373956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor Base() {} 383956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor }; 393956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor 403956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor template <class ParentClass> 413956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor class Derived : public ParentClass { 423956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor public: 433956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor Derived() : Base() {} 443956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor }; 453956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor 463956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor class Final : public Derived<Base> { 473956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor }; 483956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor 493956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor int 503956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor main (void) 513956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor { 52cb7709c06027448c754dd03e2e521d82d04818bfRichard Smith Final final; 533956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor return 0; 543956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor } 553956b1ab303139d9e952c2c30ed16643fad0c325Douglas Gregor} 5654b3ba8cf2eb4886a88cdb8adedb15f43333ff1dRichard Smith 5754b3ba8cf2eb4886a88cdb8adedb15f43333ff1dRichard Smithnamespace NonDependentError { 5854b3ba8cf2eb4886a88cdb8adedb15f43333ff1dRichard Smith struct Base { Base(int); }; // expected-note 2{{candidate}} 5954b3ba8cf2eb4886a88cdb8adedb15f43333ff1dRichard Smith 6054b3ba8cf2eb4886a88cdb8adedb15f43333ff1dRichard Smith template<typename T> 6154b3ba8cf2eb4886a88cdb8adedb15f43333ff1dRichard Smith struct Derived1 : Base { 6254b3ba8cf2eb4886a88cdb8adedb15f43333ff1dRichard Smith Derived1() : Base(1, 2) {} // expected-error {{no matching constructor}} 6354b3ba8cf2eb4886a88cdb8adedb15f43333ff1dRichard Smith }; 6454b3ba8cf2eb4886a88cdb8adedb15f43333ff1dRichard Smith 6554b3ba8cf2eb4886a88cdb8adedb15f43333ff1dRichard Smith template<typename T> 6654b3ba8cf2eb4886a88cdb8adedb15f43333ff1dRichard Smith struct Derived2 : Base { 6754b3ba8cf2eb4886a88cdb8adedb15f43333ff1dRichard Smith Derived2() : BaseClass(1) {} // expected-error {{does not name a non-static data member or base}} 6854b3ba8cf2eb4886a88cdb8adedb15f43333ff1dRichard Smith }; 6954b3ba8cf2eb4886a88cdb8adedb15f43333ff1dRichard Smith 7054b3ba8cf2eb4886a88cdb8adedb15f43333ff1dRichard Smith Derived1<void> d1; 7154b3ba8cf2eb4886a88cdb8adedb15f43333ff1dRichard Smith Derived2<void> d2; 7254b3ba8cf2eb4886a88cdb8adedb15f43333ff1dRichard Smith} 73