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

Другие вопросы по тегам