blob: 8071f08b73cf732e95f98da0b4986102c2dd25a1 [file] [log] [blame]
%module duplicate_class_name_in_ns
%rename(XA) A::X;
%rename(XB) B::X;
%inline %{
namespace A
{
class X
{
public:
X(){};
};
template<typename T>
class Foo
{
public:
Foo(){};
};
class Bar
{
public:
Bar(){};
};
template<typename T>
class Baz
{
public:
Baz(){};
};
}
namespace B
{
// non-template derived from non-template
class X : public A::X
{
public:
X(){};
A::X do_x(){return A::X();}
};
// template derived from template with different template args
template<typename T, typename U>
class Foo : public A::Foo<U>
{
public:
Foo(){};
A::Foo<U> do_foo(){return A::Foo<U>();}
};
// template derived from non-template
template<typename T, typename U>
class Bar : public A::Bar
{
public:
Bar(){};
A::Bar do_bar(){return A::Bar();}
};
// template derived from template with same template args
template<typename T>
class Baz : public A::Baz<T>
{
public:
Baz(){};
A::Baz<T> do_baz(){return A::Baz<T>();}
};
}
%}
%template(AFoo) A::Foo<double>;
%template(ABaz) A::Baz<double>;
%template(BFoo) B::Foo<int, double>;
%template(BBar) B::Bar<int, double>;
%template(BBaz) B::Baz<double>;
%inline %{
A::X get_a_x() {B::X x; return x.do_x();}
A::Foo<double> get_a_foo() {B::Foo<int, double> x; return x.do_foo();}
A::Bar get_a_bar() {B::Bar<int, double> x; return x.do_bar();}
A::Baz<double> get_a_baz() {B::Baz<double> x; return x.do_baz();}
%}