Я хочу использовать 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>
работает нормально, но, возможно, это я что-то упустил. Есть ли у вас какие-либо идеи?
Спасибо
Как указано в комментариях, Clang, вероятно, по умолчанию использует системные заголовки libstdc ++, а libstdc ++ вашей системы слишком стар, чтобы поддерживать C ++ 17.
Либо установите более новый GCC (который поставляется с более новой libstdc ++), а затем скажите Clang, как найти его с помощью --gcc-toolchain=/path/to/new/gcc
или установите libc ++ вместе с Clang и попросите его использовать libc ++ с -stdlib=libc++
вариант.
Если вы решите установить более новую версию libstdc ++, то вам понадобится как минимум GCC 7.1, который первым предоставил <optional>
,
Других решений пока нет …