blob: 6dae20774585e0dac65cd938965cc29a0fb87355 [file] [log] [blame]
Daniel Dunbar8fbe78f2009-12-15 20:14:24 +00001// RUN: %clang_cc1 -fsyntax-only -verify %s
Charles Lie7cbb3e2015-11-17 20:25:05 +00002// RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s
3// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
Fariborz Jahanianc1fc3ec2009-07-01 19:21:19 +00004
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
Douglas Gregor1c69bf02010-06-16 16:03:14 +000036namespace 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 int
52 main (void)
53 {
Richard Smith69f90dc2012-01-05 04:12:21 +000054 Final final;
Douglas Gregor1c69bf02010-06-16 16:03:14 +000055 return 0;
56 }
57}
Richard Smith60f2e1e2012-09-25 00:23:05 +000058
59namespace NonDependentError {
Charles Lie7cbb3e2015-11-17 20:25:05 +000060 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
Richard Smith60f2e1e2012-09-25 00:23:05 +000065
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}