6

我通过 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_typestd::function我可以推出我自己的版本std::function,但不得不这样做似乎很可惜。

如果我使用带有编译器标志的 MSVC,它工作正常/GR-

4

1 回答 1

7

这是Clang 13 中修复的错误。


Clang MSVC 驱动程序无法定义_HAS_STATIC_RTTIto 0,MSVC 标准库使用它来启用无 RTTI 代码。

作为一种解决方法,您可以使用编译器标志在全局范围内手动定义它,或者在包含任何标准库头文件之前对其进行定义。

于 2017-12-23T10:35:17.257 回答