2

我想使用 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>工作正常,但也许是我错过了一些东西。你有什么想法?

谢谢

4

1 回答 1

5

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

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

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

于 2017-12-13T13:42:36.300 回答