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