clang, std :: function и -fno-rtti

Я использую Clang 5 в Windows через clang-cl и столкнулся с проблемой, пытаясь отключить информацию о типе среды выполнения (-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 с лямбдами в Clang без RTTI? Документы говорят, что только target а также target_type на std::function должен быть нужен RTTI. Я могу свернуть свою собственную версию std::function, но, кажется, стыдно это делать.

Это работает нормально, если я использую MSVC с флагом компилятора /GR-,

3

Решение

Это связано с ошибкой в ​​драйвере Clang MSVC, когда он не может определить _HAS_STATIC_RTTI в 0, который используется стандартной библиотекой MSVC для включения в некоторых случаях кода, не совместимого с RTTI.

В качестве обходного пути, пока ошибка не будет устранена, вы можете вручную определить _HAS_STATIC_RTTI в 0 глобально используя параметры компилятора или определяя его перед включением любых стандартных заголовков библиотеки.

4

Другие решения

Других решений пока нет …