1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
template<typename T> struct A { template<typename L> struct SubA { }; template<typename T1,typename L> void f(T1 & t1, SubA<L> & t2) { } template<typename U> void g(SubA<U> & suba) { } template<typename U> void h(SubA<U> & suba) { } }; int main(void) { int i; A<int> a; A<int>::SubA<int> suba; a.f(i,suba); a.g(suba); a.h(suba); }