88 lines · cpp
1// RUN: %clang_cc1 -fsyntax-only -verify %s2// RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s3// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s4 5template<class X> struct A {};6 7template<class X> struct B : A<X> {8 B() : A<X>() {}9};10B<int> x;11 12template<class X> struct B1 : A<X> {13 typedef A<X> Base;14 B1() : Base() {}15};16B1<int> x1;17 18 19template<typename T> struct Tmpl { };20 21template<typename T> struct TmplB { };22 23struct TmplC : Tmpl<int> {24 TmplC() :25 Tmpl<int>(),26 TmplB<int>() { } // expected-error {{type 'TmplB<int>' is not a direct or virtual base of 'TmplC'}}27};28 29 30struct TmplD : Tmpl<char>, TmplB<char> {31 TmplD():32 Tmpl<int>(), // expected-error {{type 'Tmpl<int>' is not a direct or virtual base of 'TmplD'}}33 TmplB<char>() {}34};35 36namespace PR7259 {37 class Base {38 public:39 Base() {}40 };41 42 template <class ParentClass>43 class Derived : public ParentClass {44 public:45 Derived() : Base() {}46 };47 48 class Final : public Derived<Base> {49 };50 51 int52 main (void)53 {54 Final final;55 return 0;56 }57}58 59namespace 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 later63// expected-note@-3 {{candidate constructor (the implicit move constructor) not viable}}64#endif65 66 template<typename T>67 struct Derived1 : Base {68 Derived1() : Base(1, 2) {} // expected-error {{no matching constructor}}69 };70 71 template<typename T>72 struct Derived2 : Base {73 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 80namespace UnresolvedUsing {81 template <class T> class A {82 using typename T::B;83 struct C : B {84 C() : B() {}85 };86 };87} // namespace UnresolvedUsing88