72 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C++
		
	
	
	
// RUN: %clang_cc1 -fms-extensions -fsyntax-only -verify %s
 | 
						|
 | 
						|
 | 
						|
class A {
 | 
						|
public:
 | 
						|
	template <class U>
 | 
						|
    A(U p) {
 | 
						|
	}
 | 
						|
	template <>
 | 
						|
    A(int p) { // expected-warning{{explicit specialization of 'A' within class scope is a Microsoft extension}}
 | 
						|
	}
 | 
						|
	
 | 
						|
	template <class U>
 | 
						|
    void f(U p) { 
 | 
						|
	}
 | 
						|
 | 
						|
	template <>
 | 
						|
    void f(int p) { // expected-warning{{explicit specialization of 'f' within class scope is a Microsoft extension}}
 | 
						|
	}
 | 
						|
 | 
						|
	void f(int p) { 
 | 
						|
    }
 | 
						|
};
 | 
						|
 | 
						|
void test1()
 | 
						|
{
 | 
						|
   A a(3);
 | 
						|
   char* b ;
 | 
						|
   a.f(b);
 | 
						|
   a.f<int>(99);
 | 
						|
   a.f(100);
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
template <class T>
 | 
						|
class B {
 | 
						|
public:
 | 
						|
	template <class U>
 | 
						|
    B(U p) { 
 | 
						|
	}
 | 
						|
	template <>
 | 
						|
    B(int p) { // expected-warning{{explicit specialization of 'B<T>' within class scope is a Microsoft extension}}
 | 
						|
	}
 | 
						|
	
 | 
						|
	template <class U>
 | 
						|
    void f(U p) {
 | 
						|
	  T y = 9;
 | 
						|
	}
 | 
						|
 | 
						|
 | 
						|
    template <>
 | 
						|
    void f(int p) { // expected-warning{{explicit specialization of 'f' within class scope is a Microsoft extension}}
 | 
						|
	  T a = 3;
 | 
						|
	}
 | 
						|
 | 
						|
	void f(int p) { 
 | 
						|
 	  T a = 3;
 | 
						|
    }
 | 
						|
};
 | 
						|
 | 
						|
void test2()
 | 
						|
{
 | 
						|
   B<char> b(3);
 | 
						|
   char* ptr;
 | 
						|
   b.f(ptr);
 | 
						|
   b.f<int>(99);
 | 
						|
   b.f(100);
 | 
						|
}
 | 
						|
 |