1

なぜこれが機能するのか

struct Base {
    virtual void visit(const A &) { };
    virtual void visit(const B &) { };
}

これは、訪問メソッドを呼び出すときのあいまいさについて不平を言います

template< typename T >
struct X {
    virtual void visit(const T &) { };
};

struct Base: X< A >, X< B > { };

これも同じ問題を示しています。

struct Y {
   virtual void visit(const A &) { };
};

struct Z {
    virtual void visit(const B &) { };
};

struct Base: Z, Y { };

どういうわけか、複数の継承が仮想関数の署名を混乱させているように見えます...

gcc バージョン 4.8.0 20130411 (プレリリース) を使用

4

1 に答える 1