我看到一个奇怪的失败,其中dynamic_cast在clang编译器上返回NULL.但是相同的代码正在使用
gcc环境.
你能指点我可能是根本原因吗? llvm和gcc上的dynamic_cast之间可能有什么区别.
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; }
还有一个观察:用gcc
if (typeid(*(*it)) == typeid(T))
正如预期的那样完美地工作但是有铿锵声
if (typeid(*(*it)) == typeid(T))
比较显示不同的行为..不确定为什么这个不同.
谢谢
解决方法
原文地址:https://www.jb51.cc/c/118359.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。