0
次のプログラムのアサーションは、使用するコンパイラによって異なる結果をもたらします.GCC 4.4では、アサーションは失敗し、CLangでは失敗します。 GCCはCでVがプライベートであるのを好まないようです。これはバグですか?異なるコンパイラを使用すると、dynamic_castとは異なる結果が得られます
#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;
}