On 28/10/2016 00:17, Douwe Gelling wrote:
c) It fails to compile on both apple LLVM 8.0.0 on osx, and on gcc 4.9 on ubuntu 12.04
It compiles in VS2013...
That makes the example compile, but doesn't tell me how to serialize an object with diamond inheritance, where a pure virtual method from the virtual base class is implemented by one of the classes in the middle.
On occasion with diamond inheritance it can help to explicitly instruct the compiler which "path" to take by further overriding the method in the class that rejoins the diamond. It's possible this may help with your issue as well. eg: struct A { virtual void act() = 0; }; struct B1 : public virtual A { }; struct B2 : public virtual A { virtual void act() override { ... } }; struct C : public B1, public B2 { // explicitly delegate to one of the bases virtual void act() override { B2::act(); } };