【发布时间】:2017-11-20 16:44:09
【问题描述】:
我想使用 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> 工作正常,但也许是我错过了一些东西。你有什么想法吗?
谢谢
【问题讨论】:
-
你也在使用最新的 GCC 的 linux 吗?我认为 linux 上的 clang 使用 GCC 标准库。因此,要在 linux 上将 Clang 与 C++17 一起使用,请确保您拥有最新的 libstdcpp。如果可以的话,考虑使用 clang 的 libc++。
-
clang 只是编译器。您缺少的是标准库的更新版本。
-
感谢两位的澄清。所以解决办法是用自己的libc++(重新)编译clang?
-
不是用 libcxx 构建 LLVM/Clang,在 llvm/projects 签出,是进行此升级的一种方法吗?
-
@Rakete1111,在树中使用 libcxx 构建 LLVM 并不意味着使用 std::lib 来编译 clang,这意味着 libc++ 将与 Clang 一起安装,因此可以与它一起使用(只需正如avitase所说)。
标签: c++ clang stdoptional