2012-04-26 10 views
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; 
} 

答えて

関連する問題