繁体   English   中英

当使用不同的编译器时,我从dynamic_cast获得不同的结果

[英]I obtain different results from dynamic_cast when using different compilers

根据所使用的编译器,以下程序中的断言给出了不同的结果:在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;
}

g ++似乎表现正常。 请参阅私有范围内的私有继承的动态向下转换,其中有一个很好的答案来描述这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM