clang6 实现 std::可选 吗?

avi*_*ase 2 c++ clang stdoptional

我想使用 C++17std::optional但它似乎在 clang 中不存在:

> 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.
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我使用的是一个相当新版本的 clang,据我所知,clang 6 应该具有完整的 C++17 支持。乍一看,这似乎是一个 clang 问题,特别是因为包含<experimental/optional>工作正常,但也许是我遗漏了一些东西。你有什么想法?

谢谢

Jon*_*ely 5

正如评论中指出的,Clang 可能默认使用系统的 libstdc++ 标头,而您的系统的 libstdc++ 太旧,无法支持 C++17。

安装较新的 GCC(附带较新的 libstdc++),然后告诉 Clang 如何使用该--gcc-toolchain=/path/to/new/gcc选项找到它,或者与 Clang 一起安装 libc++ 并告诉它使用该-stdlib=libc++选项的 libc++。

如果您选择安装较新的 libstdc++,那么您至少需要 GCC 7.1,它是第一个提供<optional>.