%module template_default %warnfilter(SWIGWARN_RUBY_WRONG_NAME) ns1::Traits::c; /* Ruby, wrong constant name */ namespace ns1 { namespace ns2 { %feature("hello") A; %feature("hello") A; %feature("hi") A; %feature("hi") A; %extend A { int foo() { return 1; } } %extend A { int foo() { return 1; } } %extend A { int bar() { return 1; } } %extend A { int bar() { return 1; } } %extend N { int bar() { return 1; } } } } %inline %{ namespace ns1 { namespace ns2 { struct Parm { }; template class A { #ifdef SWIG %typemap(in) A * { /* in A */ } #ifdef SWIGCSHARP %typemap(out) A * { /* out A */ $result=0; } #else %typemap(out) A * { /* out A */ } #endif #endif }; typedef unsigned int category; const category one = 1; const category two = 1; template class N { #ifdef SWIG %typemap(in) N * { /* in N */ } #ifdef SWIGCSHARP %typemap(out) N * { /* out N */ $result=0; } #else %typemap(out) N * { /* out N */ } #endif #endif }; } } %} %template(A_p) ns1::ns2::A; %template(N_1p) ns1::ns2::N; namespace ns1 { namespace ns2 { %template(A_ii) A; %template(A_d) A; %template(N_d) N; } } %inline %{ namespace ns1 { namespace ns2 { namespace ns3 { struct B : A { }; struct C : N { }; A *get_a1(A *a) { return a; } A *get_a2(A *a) { return a; } } } } %} %inline %{ namespace ns1 { struct Traits { static const ns2::category c = ns2::one; }; namespace ns4 { template struct D : ns2::N { D() { } }; template > struct Base : T2 { }; } } %} %template(Doo) ns1::ns4::D; %template(Boo) ns1::ns4::Base >; %inline %{ namespace ns1 { namespace ns5 { struct Der : ns4::Base { }; } } %} %inline %{ namespace hi { class CFoo { }; template class CTemplate { }; typedef CTemplate TBla; // OK typedef void (*TFunc1)(CFoo arg); // OK typedef void (*TFunc2)(CTemplate arg); // OK typedef void (*TFunc3)(CTemplate* arg); // OK int foo(TFunc1 a, TFunc2 b, TFunc3 c) { return 0; } } %} #ifndef SWIGCHICKEN %include std_vector.i %{ #include %} %inline %{ void g(std::vector* s = 0) {} void q(double = 0) {} %} %constant void (*Bf)(std::vector *p = 0) = g; %constant void (*Cf)(double = 0) = q; #endif