%module using_directive_and_declaration // Test using directives combined with using declarations %inline %{ namespace Outer1 { namespace Space1 { class Thing1 {}; } } using namespace Outer1::Space1; using Outer1::Space1::Thing1; void useit1(Thing1 t) {} namespace Outer2 { namespace Space2 { class Thing2 {}; } } using namespace Outer2; using Space2::Thing2; void useit2(Thing2 t) {} namespace Outer3 { namespace Space3 { namespace Middle3 { class Thing3 {}; } } } using namespace Outer3; using namespace Space3; using Middle3::Thing3; void useit3(Thing3 t) {} namespace Outer4 { namespace Space4 { namespace Middle4 { class Thing4 {}; } } } using namespace Outer4::Space4; using Middle4::Thing4; void useit4(Thing4 t) {} namespace Outer5 { namespace Space5 { namespace Middle5 { namespace More5 { class Thing5 {}; } } } } using namespace ::Outer5::Space5; using namespace Middle5; using More5::Thing5; void useit5(Thing5 t) {} %} // Same symbol name in different namespaces %rename(Thing6a) Outer6::Space6a::Thing6; %inline %{ namespace Outer6 { namespace Space6a { struct Thing6 { void a() {} }; } namespace Space6b { struct Thing6 { void b() {} }; } } using namespace Outer6::Space6b; void useit6(Outer6::Space6a::Thing6 ta, Thing6 tb) {} namespace Outer7 { namespace Space7 { namespace Middle7 { class Thing7; } } } using namespace Outer7::Space7; class Middle7::Thing7 {}; using Middle7::Thing7; void useit7(Thing7 t) {} void useit7a(Outer7::Space7::Middle7::Thing7 t) {} void useit7b(::Outer7::Space7::Middle7::Thing7 t) {} void useit7c(Middle7::Thing7 t) {} namespace Outer7 { namespace Space7 { void useit7d(Middle7::Thing7 t) {} } } %}