clang6是否实现了std :: optional?

时间:2017-11-20 16:44:10

标签: c++ clang stdoptional

我想使用C ++ 17 std::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.

正如您所看到的,我正在使用一个相当新版本的clang,据我所知,clang 6应该具有完整的C ++ 17支持。乍一看,这似乎是一个铿锵的问题,特别是因为包括<experimental/optional>工作得很好,但也许是我错过了什么。你有什么想法吗?

由于

1 个答案:

答案 0 :(得分:3)

正如评论中指出的那样,Clang默认使用系统的libstdc ++头文件,而你的系统libstdc ++太旧了,无法支持C ++ 17。

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

如果您选择安装较新的libstdc ++,那么您至少需要GCC 7.1,这是第一个提供-stdlib=libc++的。