clang コンパイラーでdynamic_cast
が返されるという奇妙な失敗が見られます。NULL
しかし、同じコードが gcc 環境で動作しています。
根本的な原因は何か教えてください。dynamic_cast
llvm と gccの違いは何でしょうか。
RTTIがデフォルトで有効になっていると思われる両方のコンパイラのデフォルトの動作を使用しています。
template<typename T> T*
find_msg_of_type(
MsgList *list
) {
T* msg = NULL;
if (list) {
for (std::vector<MsgList*>::iterator it = list->element.begin();
it != list->element.end();
it++) {// MsgList can be list of objects build with GSoap.
if (typeid(*(*it)) == typeid(T)) {
msg = dynamic_cast<T*>(*it); // Failing on clang but this same code is working with gcc compiler.
break;
}
}
}
return msg;
}
もう1つの観察:gccを使用
if (typeid(*(*it)) == typeid(T))
期待どおりに完全に機能していますが、clangでは
if (typeid(*(*it)) == typeid(T))
比較は異なる動作を示しています..なぜこれが異なるのか正確にはわかりません。
ありがとう