// RUN: %clang_cc1 -fsyntax-only -verify %s template<typename T> struct X { template<typename U> struct Inner { }; template<typename U> void f(T, U) { } }; template<> template<typename U> struct X<int>::Inner { U member; }; template<> template<typename U> void X<int>::f(int x, U y) { x = y; // expected-error{{incompatible type}} } void test(X<int> xi, X<long> xl, float *fp) { X<int>::Inner<float*> xii; xii.member = fp; xi.f(17, 25); xi.f(17, 3.14159); xi.f(17, fp); // expected-note{{instantiation}} X<long>::Inner<float*> xli; xli.member = fp; // expected-error{{no member}} xl.f(17, fp); // okay }