Inside GeometryDefaultExtension.h we need this:
Code: Select all
template <typename T>
Base::Type GeometryDefaultExtension<T>::classTypeId{Base::Type::badType()};
template<> void * GeometryDefaultExtension<long>::create();
template<> void * GeometryDefaultExtension<std::string>::create();
template<> void * GeometryDefaultExtension<bool>::create();
template<> void * GeometryDefaultExtension<double>::create();
Code: Select all
#undef TYPESYSTEM_SOURCE_TEMPLATE_P
#define TYPESYSTEM_SOURCE_TEMPLATE_P(_class_) \
//template<> Base::Type _class_::classTypeId = Base::Type::badType(); drop this line <<<<===
template<> Base::Type _class_::getClassTypeId(void) { return _class_::classTypeId; } \
template<> Base::Type _class_::getTypeId(void) const { return _class_::classTypeId; } \
template<> void * _class_::create(void){\
return new _class_ ();\
}
#undef TYPESYSTEM_SOURCE_TEMPLATE_T
#define TYPESYSTEM_SOURCE_TEMPLATE_T(_class_, _parentclass_) \
TYPESYSTEM_SOURCE_TEMPLATE_P(_class_)\
template<> void _class_::init(void){\
initSubclass(_class_::classTypeId, #_class_ , #_parentclass_, &(_class_::create) ); \
}
The next step is to verify that it still works with msvc, and clang and gcc under Linux.
EDIT: msvc doesn't complain about the changes.
EDIT2: clang under Linux doesn't complain either