// { dg-do run } #include #include class XMemory { public: void * operator new (size_t size); void operator delete (void *p); protected: XMemory () {} virtual ~XMemory() {} }; class XSerializable { public: virtual ~XSerializable () {}; virtual bool isSerializable() const = 0; virtual void serialize () = 0; protected: XSerializable() {}; }; class Grammar: public XSerializable, public XMemory { public: enum GrammarType { DTDGrammarType, SchemaGrammarType, OtherGrammarType, Unknown }; virtual ~Grammar() {} virtual GrammarType getGrammarType() const = 0; virtual bool getValidated() const = 0; virtual bool isSerializable() const; virtual void serialize (); protected: Grammar() {}; }; class SchemaGrammar : public Grammar { public: SchemaGrammar () : Grammar(), elemID(10) { fValidated = true; } virtual ~SchemaGrammar() {} virtual Grammar::GrammarType getGrammarType() const; virtual bool getValidated() const; virtual bool isSerializable () const; virtual void serialize (); private: const unsigned int elemID; bool fValidated; }; class OtherGrammar : public Grammar { public: OtherGrammar () : Grammar(), elemID(10) { fValidated = true; } virtual ~OtherGrammar() {} virtual Grammar::GrammarType getGrammarType() const; virtual bool getValidated() const; virtual bool isSerializable () const; virtual void serialize (); private: const unsigned int elemID; bool fValidated; }; void Grammar::serialize () { printf ("in Grammar::serialize\n"); } bool Grammar::isSerializable () const { return true; } bool SchemaGrammar::isSerializable () const { return true; } void SchemaGrammar::serialize () { printf ("in SchemaGrammar::serialize\n"); } Grammar::GrammarType SchemaGrammar::getGrammarType() const { return Grammar::SchemaGrammarType; } bool SchemaGrammar::getValidated () const { return fValidated; } void * XMemory::operator new (size_t size) { return malloc (size); } void XMemory::operator delete (void *p) { } bool OtherGrammar::isSerializable () const { return false; } void OtherGrammar::serialize () { printf ("in OtherGrammar::serialize\n"); } Grammar::GrammarType OtherGrammar::getGrammarType() const { return Grammar::OtherGrammarType; } bool OtherGrammar::getValidated () const { return fValidated; } int main (int argc, char **argv) { SchemaGrammar sPtr; OtherGrammar oPtr; Grammar &sGrammar = sPtr; for (int i = 0; i < 2; ++i) { if (i == 0) sGrammar = oPtr; else sGrammar = sPtr; if (sGrammar.getGrammarType() != Grammar::SchemaGrammarType || sGrammar.getValidated ()) printf ("if condition was true.\n"); else printf ("if condition was false.\n"); } return 0; }