0

次のプログラムのアサーションは、使用するコンパイラに応じて異なる結果を示します。GCC 4.4 ではアサーションが失敗しますが、CLang では失敗しません。GCC は V が C でプライベートであることを好まないようです。これはバグですか?

#include <cassert>

class V {
public:
    virtual ~V() { };
};

template<class T>
class C : public T, private V {
public:
    static V* new_() {
        return new C();
    }
};

struct MyT {
};

typedef C<MyT> C_MyT;

int main(int argc, char** argv) {
    V* o2 = C_MyT::new_();
    assert(dynamic_cast<C_MyT*> (o2)); // failure in GCC, success in CLang
    return 0;
}
4

1 に答える 1

2

g++ は正しく動作しているようです。これを説明する良い答えがあるプライベートスコープ内のプライベート継承の動的ダウンキャストを参照してください。

于 2012-04-26T01:05:20.853 に答える