1 // RUN: %clang_cc1 -fms-extensions -fsyntax-only -verify %s
2
3
4 class A {
5 public:
6 template <class U>
A(U p)7 A(U p) {
8 }
9 template <>
A(int p)10 A(int p) { // expected-warning{{explicit specialization of 'A' within class scope is a Microsoft extension}}
11 }
12
13 template <class U>
f(U p)14 void f(U p) {
15 }
16
17 template <>
f(int p)18 void f(int p) { // expected-warning{{explicit specialization of 'f' within class scope is a Microsoft extension}}
19 }
20
f(int p)21 void f(int p) {
22 }
23 };
24
test1()25 void test1()
26 {
27 A a(3);
28 char* b ;
29 a.f(b);
30 a.f<int>(99);
31 a.f(100);
32 }
33
34
35
36
37 template <class T>
38 class B {
39 public:
40 template <class U>
B(U p)41 B(U p) {
42 }
43 template <>
B(int p)44 B(int p) { // expected-warning{{explicit specialization of 'B<T>' within class scope is a Microsoft extension}}
45 }
46
47 template <class U>
f(U p)48 void f(U p) {
49 T y = 9;
50 }
51
52
53 template <>
f(int p)54 void f(int p) { // expected-warning{{explicit specialization of 'f' within class scope is a Microsoft extension}}
55 T a = 3;
56 }
57
f(int p)58 void f(int p) {
59 T a = 3;
60 }
61 };
62
test2()63 void test2()
64 {
65 B<char> b(3);
66 char* ptr;
67 b.f(ptr);
68 b.f<int>(99);
69 b.f(100);
70 }
71
72