91 lines
1.5 KiB
C
91 lines
1.5 KiB
C
// { dg-do run }
|
|
// prms-id: 16146
|
|
|
|
extern "C" int printf (const char *, ...);
|
|
|
|
class myFoundation {
|
|
protected:
|
|
myFoundation () { count = 0; }
|
|
virtual ~myFoundation () {}
|
|
|
|
public:
|
|
void addRef () { ++count; }
|
|
void removeRef () { if (count > 0) --count; }
|
|
|
|
private:
|
|
long count;
|
|
};
|
|
|
|
|
|
class firstIntermediate :virtual public myFoundation {
|
|
public:
|
|
firstIntermediate () {}
|
|
~firstIntermediate () {}
|
|
|
|
void bar () { printf ("Bar\n"); }
|
|
};
|
|
|
|
|
|
class firstBase : public firstIntermediate {
|
|
public:
|
|
firstBase () {}
|
|
~firstBase () {}
|
|
|
|
virtual void g () {}
|
|
};
|
|
|
|
|
|
class secondIntermediate : virtual public myFoundation {
|
|
public:
|
|
secondIntermediate () {}
|
|
~secondIntermediate () {}
|
|
|
|
virtual void h () {}
|
|
};
|
|
|
|
|
|
class secondBase : public secondIntermediate {
|
|
public:
|
|
secondBase () {}
|
|
~secondBase () {}
|
|
|
|
virtual void h () {}
|
|
};
|
|
|
|
|
|
class typeInterface : virtual public firstBase {
|
|
public:
|
|
typeInterface () {}
|
|
~typeInterface () {}
|
|
|
|
virtual void i () {}
|
|
};
|
|
|
|
class classServices : virtual public firstBase,
|
|
public secondBase {
|
|
public:
|
|
classServices () {}
|
|
~classServices () {}
|
|
|
|
virtual void j () {}
|
|
};
|
|
|
|
class classImplementation : public typeInterface,
|
|
public classServices {
|
|
public:
|
|
classImplementation () {}
|
|
~classImplementation () {}
|
|
|
|
void g () {}
|
|
void h () {}
|
|
void i () {}
|
|
void j () {}
|
|
};
|
|
|
|
int main () {
|
|
firstBase* fbp = new classImplementation;
|
|
classImplementation* cip = dynamic_cast <classImplementation*> (fbp);
|
|
cip->addRef();
|
|
myFoundation* mfp = cip;
|
|
}
|