summaryrefslogtreecommitdiff
path: root/Examples/test-suite/template_using_directive_typedef.i
blob: 1c8bcb9dd7a4bc7eec95c0caec21b036cdc88fc2 (plain)
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
%module template_using_directive_typedef

%inline %{
namespace space {
  template<typename T> class Vector {};
  class VectorClass {};
}
struct Obj {};
%}

%template(Vector_Obj) space::Vector<Obj>;

%inline %{
namespace tns {
  using space::Vector; // template using directives were not being added into the typedef table
  using space::VectorClass;
  typedef Vector<Obj> NSVec;
}
%}

%inline %{
namespace tns {
  struct Holder {
//	using Vec = Vector<Obj>;
    typedef Vector<Obj> Vec;
    typedef VectorClass VecClass;
	Vec items;
    void holder_use1(space::Vector<Obj>, tns::NSVec, tns::Vector<Obj>) {}
    void holder_use2(space::Vector<Obj>, NSVec, Vector<Obj>) {}
    void holder_use3(tns::Holder::Vec, Holder::Vec, Vec) {}
  };
  void tns_holder_use(tns::Holder::Vec, Holder::Vec) {}
  void tns_use(space::Vector<Obj>, NSVec, tns::NSVec) {}
}
void global_holder_use(tns::Holder::Vec) {}
void global_use(space::Vector<Obj>, tns::NSVec, tns::Vector<Obj>) {}
namespace ns1 {
  void ns1_holder_use(tns::Holder::Vec) {}
}
namespace ns2 {
  using namespace tns;
  void ns2_holder_use(tns::Holder::Vec, Holder::Vec, NSVec, Vector<Obj>) {}
}
%}