我通过 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\14.13.26128\include\functional(435,11): error:
cannot use typeid with -fno-rtti
return (typeid(_Callable));
^
这让我感到惊讶,有没有办法std::function
在没有 RTTI 的情况下在 Clang 中使用 lambda?文档说只有target
并且应该需要RTTI target_type
。std::function
我可以推出我自己的版本std::function
,但不得不这样做似乎很可惜。
如果我使用带有编译器标志的 MSVC,它工作正常/GR-
。