Visual Studio 如何将 boost::function 与 /GR- 一起使用,而 GCC 不能使用 -fno-rtti?
How can Visual Studio use boost::function with /GR- while GCC can't with -fno-rtti?
我最近开始使用NDK将一个应用程序移植到Android上,我遇到了以下错误:
boost/function/function_base.hpp:220: error: cannot use typeid with -fno-rtti.
通常情况下,我不会考虑这个错误,但是visual studio项目文件设置/GR-
,它禁用RTTI并且使用boost::函数没有问题。
我的理论是,因为typeid是在静态类型可以确定时由编译器计算的,所以在应用程序中每次使用boost::函数都必须是这种情况。Visual Studio必须首先尝试确定静态类型,而GCC在尝试计算typeid之前立即抛出错误。
听起来对吗?如果不是,发生了什么?
我没有启动到我的Windows分区,但是在MSDN中查找这个很简单。
根据MSDN上的此链接:
如果表达式解引用一个指针,以及该指针的值为0时,typeid抛出一个bad_typeid异常。如果指针没有指向一个有效的对象,抛出__non_rtti_object异常,表示试图分析触发故障的RTTI(如访问冲突),因为对象在某种程度上是无效的(坏指针)或者代码没有用/GR编译).
如果表达式既不是指针也不是基类的引用对象的返回结果是一个type_info引用表达式的静态类型。表达式的静态类型引用转换为编译时已知的表达式类型.....
换句话说,如果表达式的类型不能在编译时推断出来,并且没有/GR,那么你将得到一个异常或编译器错误。但是第二段暗示它可以在编译时推断出非二义性类型。
相关文章:
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 奇怪的结构&GCC&clang(void*返回类型)
- 使用 gcc 的 -fno-math-errno 可能有什么副作用?
- 为什么仅 -fno-signed-0 就可以实现优化,而似乎也需要 -ffinite-math-only (gcc)
- GCC 仍然使用 -fno-threadsafe-static 生成保护变量
- clang, std::function and -fno-rtti
- glibc函数的GCC、-flto、-fno内置和自定义函数实现
- 如何检查库是否使用 -fno-rtti 编译
- 使用带有普通旧结构(gcc)的RTTI
- GCC 5.3 中的新选项:-fno-semantic-interposition
- 从 GCC 可执行文件中删除符号和 RTTI 文本
- 编译时将fno-rtti-lib和rtti-lib合并
- 错误:无法将typeid与-fno rtti一起使用
- 带有-fno-builtin的GCC似乎不起作用
- MSVC 相当于 GCC 的 -fno-finite-math-only?
- 编译时类型没有RTTI与GCC
- 在关闭RTTI的情况下增强简单类的序列化(-fno-rtti)
- 如何从指针中知道 gcc 的 c++ 对象的 RTTI 信息"this"?
- Visual Studio 如何将 boost::function 与 /GR- 一起使用,而 GCC 不能使用 -fno-rtti?
- 使用-fno-rtti编译的共享库中的子类