diff options
Diffstat (limited to 'clang/test/SemaTemplate/ms-function-specialization-class-scope.cpp')
| -rw-r--r-- | clang/test/SemaTemplate/ms-function-specialization-class-scope.cpp | 71 | 
1 files changed, 71 insertions, 0 deletions
diff --git a/clang/test/SemaTemplate/ms-function-specialization-class-scope.cpp b/clang/test/SemaTemplate/ms-function-specialization-class-scope.cpp new file mode 100644 index 0000000..bda87f9 --- /dev/null +++ b/clang/test/SemaTemplate/ms-function-specialization-class-scope.cpp @@ -0,0 +1,71 @@ +// 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); +} +  | 
