1 // RUN: %clang_cc1 -fsyntax-only -verify %s
2 
3 template<class X> struct A {};
4 
5 template<class X> struct B : A<X> {
6   B() : A<X>() {}
7 };
8 B<int> x;
9 
10 template<class X> struct B1 : A<X> {
11   typedef A<X> Base;
12   B1() : Base() {}
13 };
14 B1<int> x1;
15 
16 
17 template<typename T> struct Tmpl { };
18 
19 template<typename T> struct TmplB { };
20 
21 struct 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 
28 struct 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 
34 namespace 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 
57 namespace NonDependentError {
58   struct Base { Base(int); }; // expected-note 2{{candidate}}
59 
60   template<typename T>
61   struct Derived1 : Base {
62     Derived1() : Base(1, 2) {} // expected-error {{no matching constructor}}
63   };
64 
65   template<typename T>
66   struct Derived2 : Base {
67     Derived2() : BaseClass(1) {} // expected-error {{does not name a non-static data member or base}}
68   };
69 
70   Derived1<void> d1;
71   Derived2<void> d2;
72 }
73