]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/SemaTemplate/ms-function-specialization-class-scope.cpp
Vendor import of clang release_30 branch r142614:
[FreeBSD/FreeBSD.git] / test / SemaTemplate / ms-function-specialization-class-scope.cpp
1 // RUN: %clang_cc1 -fms-extensions -fsyntax-only -verify %s
2
3
4 class A {
5 public:
6         template <class U>
7     A(U p) {
8         }
9         template <>
10     A(int p) { // expected-warning{{explicit specialization of 'A' within class scope is a Microsoft extension}}
11         }
12         
13         template <class U>
14     void f(U p) { 
15         }
16
17         template <>
18     void f(int p) { // expected-warning{{explicit specialization of 'f' within class scope is a Microsoft extension}}
19         }
20
21         void f(int p) { 
22     }
23 };
24
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>
41     B(U p) { 
42         }
43         template <>
44     B(int p) { // expected-warning{{explicit specialization of 'B<T>' within class scope is a Microsoft extension}}
45         }
46         
47         template <class U>
48     void f(U p) {
49           T y = 9;
50         }
51
52
53     template <>
54     void f(int p) { // expected-warning{{explicit specialization of 'f' within class scope is a Microsoft extension}}
55           T a = 3;
56         }
57
58         void f(int p) { 
59           T a = 3;
60     }
61 };
62
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