forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			31 lines
		
	
	
		
			639 B
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			31 lines
		
	
	
		
			639 B
		
	
	
	
		
			C++
		
	
	
	
| // RUN: %clang_cc1 -fsyntax-only -verify %s
 | |
| 
 | |
| template<typename T>
 | |
| struct X {
 | |
|   template<typename U> struct Inner { };
 | |
|   
 | |
|   template<typename U> void f(T, U) { }
 | |
| };
 | |
| 
 | |
| template<> template<typename U>
 | |
| struct X<int>::Inner {
 | |
|   U member;
 | |
| };
 | |
| 
 | |
| template<> template<typename U>
 | |
| void X<int>::f(int x, U y) { 
 | |
|   x = y; // expected-error{{incompatible type}}
 | |
| }
 | |
| 
 | |
| void test(X<int> xi, X<long> xl, float *fp) {
 | |
|   X<int>::Inner<float*> xii;
 | |
|   xii.member = fp;
 | |
|   xi.f(17, 25);
 | |
|   xi.f(17, 3.14159);
 | |
|   xi.f(17, fp); // expected-note{{instantiation}}
 | |
|   X<long>::Inner<float*> xli;
 | |
|   
 | |
|   xli.member = fp; // expected-error{{no member}}
 | |
|   xl.f(17, fp); // okay
 | |
| }
 |