[Issue 17462] Order of base interfaces affects compiler behavior

d-bugmail at puremagic.com d-bugmail at puremagic.com
Mon Jan 15 19:23:29 UTC 2018


https://issues.dlang.org/show_bug.cgi?id=17462

--- Comment #4 from Andrei Alexandrescu <andrei at erdani.com> ---
The following C++ equivalent does require the additional implementation
(uncomment code to get it to compile):

--------------------
class Marker {};
class Foo { public: virtual void foo() = 0; };

class FooMarked : public Foo, public Marker {};
class MarkedFoo : public Marker, public Foo  {};

class Base : public Foo { virtual void foo() {} };

class Derived1 : public Base, public FooMarked {
    //virtual void foo() {}
}; 
class Derived2 : public Base, public MarkedFoo {
    //virtual void foo() {}
};

int main() {
    auto d1 = new Derived1;
    auto d2 = new Derived2;
}
--------------------

However, this other code, which arguably is closer in spirit, does work:

--------------------
class Marker {};
class Foo { public: virtual void foo() = 0; };

class FooMarked : virtual public Foo, public Marker {};
class MarkedFoo : public Marker, virtual public Foo  {};

class Base : virtual public Foo { virtual void foo() {} };

class Derived1 : public Base, public FooMarked {}; 
class Derived2 : public Base, public MarkedFoo {};

int main() {
    auto d1 = new Derived1;
    auto d2 = new Derived2;
}
--------------------

--


More information about the Digitalmars-d-bugs mailing list