diff options
Diffstat (limited to 'clang/test')
| -rw-r--r-- | clang/test/SemaTemplate/ms-function-specialization-class-scope.cpp | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/clang/test/SemaTemplate/ms-function-specialization-class-scope.cpp b/clang/test/SemaTemplate/ms-function-specialization-class-scope.cpp index 99358fa5f45..5da00837cc0 100644 --- a/clang/test/SemaTemplate/ms-function-specialization-class-scope.cpp +++ b/clang/test/SemaTemplate/ms-function-specialization-class-scope.cpp @@ -51,16 +51,27 @@ void test2() { } namespace PR12709 { + template<class T> class TemplateClass { + void member_function() { specialized_member_template<false>(); } -template<class T> class TemplateClass { - void member_function() { specialized_member_template<false>(); } + template<bool b> void specialized_member_template() {} - template<bool b> void specialized_member_template() {} + template<> void specialized_member_template<false>() { + // expected-warning@-1 {{explicit specialization of 'specialized_member_template' within class scope is a Microsoft extension}} + } + }; - template<> void specialized_member_template<false>() { - // expected-warning@-1 {{explicit specialization of 'specialized_member_template' within class scope is a Microsoft extension}} - } -}; + void f() { TemplateClass<int> t; } +} + +namespace Duplicates { + template<typename T> struct A { + template<typename U> void f(); + template<> void f<int>() {} // expected-warning {{Microsoft extension}} + template<> void f<T>() {} // expected-warning {{Microsoft extension}} + }; -void f() { TemplateClass<int> t; } + // FIXME: We should diagnose the duplicate explicit specialization definitions + // here. + template struct A<int>; } |

