| // 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); |
| } |
| |