В clang6 реализован std :: необязательный?

Я хочу использовать C ++ 17 std::optional но, кажется, отсутствует в лягушке:

> cat test.cxx
#include <optional>

int main(int, char **) {
return 0;
}
> $CXX --version | head -n1
clang version 6.0.0 (trunk 317775)
> $CXX -std=c++17 test.cxx
test.cxx:1:10: fatal error: 'optional' file not found
#include <optional>
^~~~~~~~~~
1 error generated.

Как видите, я использую довольно новую версию clang и, насколько я знаю, clang 6 должен иметь полную поддержку C ++ 17. На первый взгляд это похоже на лягушку, особенно потому, что <experimental/optional> работает нормально, но, возможно, это я что-то упустил. Есть ли у вас какие-либо идеи?

Спасибо

1

Решение

Как указано в комментариях, Clang, вероятно, по умолчанию использует системные заголовки libstdc ++, а libstdc ++ вашей системы слишком стар, чтобы поддерживать C ++ 17.

Либо установите более новый GCC (который поставляется с более новой libstdc ++), а затем скажите Clang, как найти его с помощью --gcc-toolchain=/path/to/new/gcc или установите libc ++ вместе с Clang и попросите его использовать libc ++ с -stdlib=libc++ вариант.

Если вы решите установить более новую версию libstdc ++, то вам понадобится как минимум GCC 7.1, который первым предоставил <optional>,

3

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

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

По вопросам рекламы [email protected]