brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · 43a3986 Raw
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