clang,std::function 和 -fno-rtti
clang, std::function and -fno-rtti
我正在通过 clang-cl 在 Windows 上使用 Clang 5,并且 运行 在尝试关闭 运行 时间类型信息 (-fno-rtti
) 时遇到了问题使用 std::function
.
这是我无法编译的示例:
#include <functional>
void foo(std::function<void()> ra2)
{
}
int main()
{
auto bar = []()
{
};
foo(bar);
return EXIT_SUCCESS;
}
命令行:
clang-cl test.cpp -Xclang -fno-rtti
错误是:
C:\Program Files (x86)\Microsoft Visual Studio\Preview\Community\VC\Tools\MSVC.13.26128\include\functional(435,11): error:
cannot use typeid with -fno-rtti
return (typeid(_Callable));
^
这让我感到惊讶,有没有办法在没有 RTTI 的情况下在 Clang 中使用 std::function
和 lambda?文档说 std::function
上只有 target
和 target_type
需要 RTTI。我可以推出自己的 std::function
版本,但不得不这样做似乎很遗憾。
如果我使用带有编译器标志 /GR-
的 MSVC,它工作正常。
这是一个错误 fixed in Clang 13。
Clang MSVC 驱动程序无法将 _HAS_STATIC_RTTI
定义为 0
,MSVC 标准库使用它来启用无 RTTI 代码。
作为解决方法,您可以使用编译器标志手动全局定义它,或者在包含任何标准库头文件之前定义它。
我正在通过 clang-cl 在 Windows 上使用 Clang 5,并且 运行 在尝试关闭 运行 时间类型信息 (-fno-rtti
) 时遇到了问题使用 std::function
.
这是我无法编译的示例:
#include <functional>
void foo(std::function<void()> ra2)
{
}
int main()
{
auto bar = []()
{
};
foo(bar);
return EXIT_SUCCESS;
}
命令行:
clang-cl test.cpp -Xclang -fno-rtti
错误是:
C:\Program Files (x86)\Microsoft Visual Studio\Preview\Community\VC\Tools\MSVC.13.26128\include\functional(435,11): error:
cannot use typeid with -fno-rtti
return (typeid(_Callable));
^
这让我感到惊讶,有没有办法在没有 RTTI 的情况下在 Clang 中使用 std::function
和 lambda?文档说 std::function
上只有 target
和 target_type
需要 RTTI。我可以推出自己的 std::function
版本,但不得不这样做似乎很遗憾。
如果我使用带有编译器标志 /GR-
的 MSVC,它工作正常。
这是一个错误 fixed in Clang 13。
Clang MSVC 驱动程序无法将 _HAS_STATIC_RTTI
定义为 0
,MSVC 标准库使用它来启用无 RTTI 代码。
作为解决方法,您可以使用编译器标志手动全局定义它,或者在包含任何标准库头文件之前定义它。