%module template_namespace_forward_declaration %inline %{ namespace Space1 { namespace Space2 { template struct XXX; template struct YYY; } template struct Space2::YYY { T yyy(T h) { return h; } }; template struct Space1::Space2::XXX { T xxx(T h) { return h; } }; void testXXX1(Space1::Space2::XXX xx) { } void testXXX2(Space2::XXX xx) { } void testXXX3(::Space1::Space2::XXX xx) { } void testYYY1(Space1::Space2::YYY yy) { } void testYYY2(Space2::YYY yy) { } void testYYY3(::Space1::Space2::YYY yy) { } } %} %template(XXXInt) Space1::Space2::XXX; %template(YYYInt) Space1::Space2::YYY;