If a project uses different pre-processor defined to compile sserialize then different types end up in different compilation units. They get linked together (without lto without any warning) and then very strange things are happening since the data layout of the types are different.
Possible fix: we need to encode the pre-processor configuration into the type for example by using namespaces.