forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			79 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
| // RUN: %clang_cc1 -fsyntax-only -verify %s
 | |
| // RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s
 | |
| // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
 | |
| 
 | |
| template<class X> struct A {};
 | |
| 
 | |
| template<class X> struct B : A<X> { 
 | |
|   B() : A<X>() {} 
 | |
| };
 | |
| B<int> x;
 | |
| 
 | |
| template<class X> struct B1 : A<X> {
 | |
|   typedef A<X> Base;
 | |
|   B1() : Base() {}
 | |
| };
 | |
| B1<int> x1;
 | |
| 
 | |
| 
 | |
| template<typename T> struct Tmpl { };
 | |
| 
 | |
| template<typename T> struct TmplB { };
 | |
| 
 | |
| struct TmplC : Tmpl<int> {
 | |
|    TmplC() :
 | |
|              Tmpl<int>(),
 | |
|              TmplB<int>() { } // expected-error {{type 'TmplB<int>' is not a direct or virtual base of 'TmplC'}}
 | |
| };
 | |
| 
 | |
| 
 | |
| struct TmplD : Tmpl<char>, TmplB<char> {
 | |
|     TmplD():
 | |
|             Tmpl<int>(), // expected-error {{type 'Tmpl<int>' is not a direct or virtual base of 'TmplD'}}
 | |
|             TmplB<char>() {}
 | |
| };
 | |
| 
 | |
| namespace PR7259 {
 | |
|   class Base {
 | |
|   public:
 | |
|     Base() {}
 | |
|   };
 | |
| 
 | |
|   template <class ParentClass>
 | |
|   class Derived : public ParentClass {
 | |
|   public:
 | |
|     Derived() : Base() {}
 | |
|   };
 | |
| 
 | |
|   class Final : public Derived<Base> {
 | |
|   };
 | |
| 
 | |
|   int
 | |
|   main (void)
 | |
|   {
 | |
|     Final final;
 | |
|     return 0;
 | |
|   }
 | |
| }
 | |
| 
 | |
| namespace NonDependentError {
 | |
|   struct Base { Base(int); }; // expected-note {{candidate constructor not viable}}
 | |
| // expected-note@-1 {{candidate constructor (the implicit copy constructor) not viable}}
 | |
| #if __cplusplus >= 201103L // C++11 or later
 | |
| // expected-note@-3 {{candidate constructor (the implicit move constructor) not viable}}
 | |
| #endif
 | |
| 
 | |
|   template<typename T>
 | |
|   struct Derived1 : Base {
 | |
|     Derived1() : Base(1, 2) {} // expected-error {{no matching constructor}}
 | |
|   };
 | |
| 
 | |
|   template<typename T>
 | |
|   struct Derived2 : Base {
 | |
|     Derived2() : BaseClass(1) {} // expected-error {{does not name a non-static data member or base}}
 | |
|   };
 | |
| 
 | |
|   Derived1<void> d1;
 | |
|   Derived2<void> d2;
 | |
| }
 |