%module cpp11_shared_ptr_crtp_upcast // Cutdown testcase for assert reported in https://github.com/swig/swig/issues/2768 // Note that this test has CRTP and %template instantiations for DiscretisedDensity template parameters not fully resolved %warnfilter(SWIGWARN_JAVA_MULTIPLE_INHERITANCE, SWIGWARN_CSHARP_MULTIPLE_INHERITANCE, SWIGWARN_D_MULTIPLE_INHERITANCE, SWIGWARN_RUBY_MULTIPLE_INHERITANCE, SWIGWARN_PHP_MULTIPLE_INHERITANCE) stir::DiscretisedDensity<3,float>; %include %{ #include namespace stir {} using namespace stir; %} %inline %{ namespace stir { // Note: CRTP template class RegisteredParsingObject : public Parent { }; } %} %shared_ptr(stir::Array<3,float>) %inline %{ namespace stir { template class Array { }; } %} %template(FloatArray3D) stir::Array<3,float>; %shared_ptr(stir::ExamData); %inline %{ namespace stir { class ExamData { }; } %} %shared_ptr(stir::DiscretisedDensity<3,float>) %inline %{ namespace stir { template class DiscretisedDensity : public ExamData, public Array { }; } %} %shared_ptr(stir::DataProcessor >) %shared_ptr(stir::RegisteredParsingObject< stir::ChainedDataProcessor >, stir::DataProcessor >, stir::DataProcessor > >) %shared_ptr(stir::ChainedDataProcessor >) %inline %{ namespace stir { template class DataProcessor { }; template class ChainedDataProcessor : public RegisteredParsingObject< ChainedDataProcessor, DataProcessor, DataProcessor > { }; } %} // SWIG will qualify Discretised in the %template() declaration even though Discretised // is not in scope with the 'using namespace stir' below commented out. //using namespace stir; %template(Float3DDiscretisedDensity) stir::DiscretisedDensity<3,float>; %template(DataProcessor3DFloat) stir::DataProcessor >; %template(RPChainedDataProcessor3DFloat) stir::RegisteredParsingObject< stir::ChainedDataProcessor >, stir::DataProcessor >, stir::DataProcessor > >; %template(ChainedDataProcessor3DFloat) stir::ChainedDataProcessor >; %inline %{ void useobject(stir::RegisteredParsingObject< stir::ChainedDataProcessor >, stir::DataProcessor >, stir::DataProcessor > >) { } %}