#include <iostream>
#include <string>
using namespace std;
class Serializable {
public:
virtual bool eq( const string & qs) const = 0;
virtual bool eq( const Serializable * o) const = 0;
};
class JSONSerializable : virtual public Serializable {
public:
virtual string toJSON( void) const = 0;
virtual bool eq( const string & qs) const {
return toJSON() == qs;
}
virtual bool eq( const Serializable * o) const {
return eq(dynamic_cast<const JSONSerializable*>(o)->toJSON());
}
};
class A : virtual public Serializable { };
class B : virtual public A,
public JSONSerializable {
public:
virtual string toJSON( void) const {
return string( "test!");
}
};
int main() {
B b;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgU2VyaWFsaXphYmxlIHsKcHVibGljOgogICAgdmlydHVhbCAgYm9vbCBlcSggY29uc3Qgc3RyaW5nICYgcXMpIGNvbnN0ID0gMDsKICAgIHZpcnR1YWwgIGJvb2wgZXEoIGNvbnN0IFNlcmlhbGl6YWJsZSAqIG8pIGNvbnN0ID0gMDsKfTsKCmNsYXNzIEpTT05TZXJpYWxpemFibGUgOiB2aXJ0dWFsIHB1YmxpYyBTZXJpYWxpemFibGUgewpwdWJsaWM6CiAgICB2aXJ0dWFsICBzdHJpbmcgdG9KU09OKCB2b2lkKSBjb25zdCA9IDA7CgogICAgdmlydHVhbCAgYm9vbCBlcSggY29uc3Qgc3RyaW5nICYgcXMpIGNvbnN0IHsKICAgICAgICAgICAgICAgICByZXR1cm4gdG9KU09OKCkgPT0gcXM7CiAgICAgICAgICAgICB9CiAgICB2aXJ0dWFsICBib29sIGVxKCBjb25zdCBTZXJpYWxpemFibGUgKiBvKSBjb25zdCB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVxKGR5bmFtaWNfY2FzdDxjb25zdCBKU09OU2VyaWFsaXphYmxlKj4obyktPnRvSlNPTigpKTsKICAgICAgICAgICAgIH0KfTsKCmNsYXNzIEEgOiB2aXJ0dWFsIHB1YmxpYyBTZXJpYWxpemFibGUgeyAgfTsKCmNsYXNzIEIgOiB2aXJ0dWFsIHB1YmxpYyBBLAogICAgICAgICAgcHVibGljIEpTT05TZXJpYWxpemFibGUgewpwdWJsaWM6CiAgICB2aXJ0dWFsICBzdHJpbmcgdG9KU09OKCB2b2lkKSBjb25zdCB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZyggInRlc3QhIik7CiAgICAgICAgICAgICB9Cn07CgoKaW50IG1haW4oKSB7CglCIGI7CglyZXR1cm4gMDsKfQ==