1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
%module template_using_directive_and_declaration_forward
// Test using directives combined with using declarations and forward declarations (templates)
%inline %{
namespace Outer1 {
namespace Space1 {
template<typename T> class Thing1;
}
}
using namespace Outer1::Space1;
using Outer1::Space1::Thing1;
template<typename T> class Thing1 {};
void useit1(Thing1<int> t) {}
void useit1a(Outer1::Space1::Thing1<int> t) {}
void useit1b(::Outer1::Space1::Thing1<int> t) {}
namespace Outer1 {
void useit1c(Space1::Thing1<int> t) {}
}
namespace Outer2 {
namespace Space2 {
template<typename T> class Thing2;
}
}
using namespace Outer2;
using Space2::Thing2;
template<typename T> class Thing2 {};
void useit2(Thing2<int> t) {}
void useit2a(Outer2::Space2::Thing2<int> t) {}
void useit2b(::Outer2::Space2::Thing2<int> t) {}
void useit2c(Space2::Thing2<int> t) {}
namespace Outer2 {
void useit2d(Space2::Thing2<int> t) {}
}
namespace Outer3 {
namespace Space3 {
namespace Middle3 {
template<typename T> class Thing3;
}
}
}
using namespace Outer3;
using namespace Space3;
using Middle3::Thing3;
template<typename T> class Thing3 {};
void useit3(Thing3<int> t) {}
void useit3a(Outer3::Space3::Middle3::Thing3<int> t) {}
void useit3b(::Outer3::Space3::Middle3::Thing3<int> t) {}
void useit3c(Middle3::Thing3<int> t) {}
namespace Outer3 {
namespace Space3 {
void useit3d(Middle3::Thing3<int> t) {}
}
}
namespace Outer4 {
namespace Space4 {
namespace Middle4 {
template<typename T> class Thing4;
}
}
}
using namespace Outer4::Space4;
using Middle4::Thing4;
template<typename T> class Thing4 {};
void useit4(Thing4<int> t) {}
void useit4a(Outer4::Space4::Middle4::Thing4<int> t) {}
void useit4b(::Outer4::Space4::Middle4::Thing4<int> t) {}
void useit4c(Middle4::Thing4<int> t) {}
namespace Outer4 {
namespace Space4 {
void useit4d(Middle4::Thing4<int> t) {}
}
}
namespace Outer5 {
namespace Space5 {
namespace Middle5 {
namespace More5 {
template<typename T> class Thing5;
}
}
}
}
using namespace ::Outer5::Space5;
using namespace Middle5;
using More5::Thing5;
template<typename T> class Thing5 {};
void useit5(Thing5<int> t) {}
void useit5a(Outer5::Space5::Middle5::More5::Thing5<int> t) {}
void useit5b(::Outer5::Space5::Middle5::More5::Thing5<int> t) {}
void useit5c(Middle5::More5::Thing5<int> t) {}
namespace Outer5 {
namespace Space5 {
void useit5d(Middle5::More5::Thing5<int> t) {}
}
}
namespace Outer7 {
namespace Space7 {
namespace Middle7 {
template<typename T> class Thing7;
}
}
}
using namespace Outer7::Space7;
template<typename T> class Middle7::Thing7 {};
using Middle7::Thing7;
void useit7(Thing7<int> t) {}
void useit7a(Outer7::Space7::Middle7::Thing7<int> t) {}
void useit7b(::Outer7::Space7::Middle7::Thing7<int> t) {}
void useit7c(Middle7::Thing7<int> t) {}
namespace Outer7 {
namespace Space7 {
void useit7d(Middle7::Thing7<int> t) {}
}
}
%}
%template(Thing1Int) Thing1<int>;
%template(Thing2Int) Thing2<int>;
%template(Thing3Int) Thing3<int>;
%template(Thing4Int) Thing4<int>;
%template(Thing5Int) Thing5<int>;
%template(Thing7Int) Thing7<int>;
|