• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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