1 // RUN: %clang_cc1 -fsyntax-only -verify %s
2
3 template<typename T>
4 struct X {
5 template<typename U> struct Inner { };
6
fX7 template<typename U> void f(T, U) { }
8 };
9
10 template<> template<typename U>
11 struct X<int>::Inner {
12 U member;
13 };
14
15 template<> template<typename U>
f(int x,U y)16 void X<int>::f(int x, U y) {
17 x = y; // expected-error{{incompatible type}}
18 }
19
test(X<int> xi,X<long> xl,float * fp)20 void test(X<int> xi, X<long> xl, float *fp) {
21 X<int>::Inner<float*> xii;
22 xii.member = fp;
23 xi.f(17, 25);
24 xi.f(17, 3.14159);
25 xi.f(17, fp); // expected-note{{instantiation}}
26 X<long>::Inner<float*> xli;
27
28 xli.member = fp; // expected-error{{no member}}
29 xl.f(17, fp); // okay
30 }
31