1 | // RUN: %clang_cc1 -fsyntax-only -verify %s |
2 | template<class T1> class A { |
3 | template<class T2> class B { |
4 | template<class T3> void mf1(T3); |
5 | void mf2(); |
6 | }; |
7 | }; |
8 | |
9 | template<> template<class X> |
10 | class A<long>::B { }; |
11 | |
12 | template<> template<> template<class T> |
13 | void A<int>::B<double>::mf1(T t) { } |
14 | |
15 | template<> template<> template<class T> |
16 | void A<long>::B<double>::mf1(T t) { } // expected-error{{does not match}} |
17 | |
18 | // FIXME: This diagnostic could probably be better. |
19 | template<class Y> template<> |
20 | void A<Y>::B<double>::mf2() { } // expected-error{{does not refer}} |
21 | |