В 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>
,