| // RUN: %clang_cc1 -fms-extensions -fsyntax-only -verify %s |
| // RUN: %clang_cc1 -fms-extensions -fdelayed-template-parsing -fsyntax-only -verify %s |
| // expected-no-diagnostics |
| template<class U> A(U p) {} |
| template<class U> void f(U p) {} |
| template<> void f(int p) {} |
| template<class T> class B { |
| template<class U> B(U p) {} |
| template<class U> void f(U p) { T y = 9; } |
| template<> void f(int p) { |
| void f(int p) { T a = 3; } |
| template<class T> class TemplateClass { |
| void member_function() { specialized_member_template<false>(); } |
| template<bool b> void specialized_member_template() {} |
| template<> void specialized_member_template<false>() {} |
| void f() { TemplateClass<int> t; } |
| template<typename T> struct A { |
| template<typename U> void f(); |
| template<> void f<int>() {} |
| template<> void f<T>() {} |
| // FIXME: We should diagnose the duplicate explicit specialization definitions |