template struct A { template struct SubA { }; template void f(T1 & t1, SubA & t2) { } template void g(SubA & suba) { } template void h(SubA & suba) { } }; int main(void) { int i; A a; A::SubA suba; a.f(i,suba); a.g(suba); a.h(suba); }