首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用c++17 mac编译

使用c++17 mac编译
EN

Stack Overflow用户
提问于 2018-01-25 22:25:23
回答 4查看 12.8K关注 0票数 8

我不能用-std=c++17编译,我得到:

代码语言:javascript
复制
error: invalid value 'c++17' in '-std=c++17'

然而,我更新了Xcode和clang。

我的Clang版本是:

代码语言:javascript
复制
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 9.0.0 (clang-900.0.39.2)
Target: x86_64-apple-darwin16.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin`

然后我加载最新的头文件,比如optional,我必须这样做

代码语言:javascript
复制
 #include <experimental/optional>

而不是

代码语言:javascript
复制
 #include <optional>
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-02-04 00:56:52

Xcode提供了自己的完整工具链,包括头文件和实际的编译器。

Apple LLVM version 9.0.0 (clang-900.0.39.2) (随Xcode9.2提供)不支持使用标志-std=c++17,因为它太旧了。可选标头仅包含在文件夹experimental/下。这就是为什么你需要#include <experimental/optional>

为了使用Xcode9.2附带的编译器编译具有c++17支持的程序,您需要使用-std=c++1z标志。

Xcode9.3将与支持-std=c++17标志的Apple LLVM version 9.1.0 (clang-902.0.30)一起发布。但是,到目前为止,optional头文件仍然在experimental/子目录下。在测试期间,这种情况可能会发生变化。

票数 7
EN

Stack Overflow用户

发布于 2018-01-25 22:29:38

以下是我从这个测试中得到的结果:

代码语言:javascript
复制
#include <experimental/optional>


int main(int, char* []) {
    return 0;
}

g++ -std=c++17 -o test test.cpp
error: invalid value 'c++17' in '-std=c++17'
g++ -std=c++1z -o test test.cpp

您尝试过c++1z参数吗?同样值得注意的是,我的测试是在没有提供-std=c++1z参数的情况下编译的。

我认为我使用的OSX版本比您的更新:

代码语言:javascript
复制
Target: x86_64-apple-darwin17.4.0
票数 2
EN

Stack Overflow用户

发布于 2018-01-25 22:30:38

您应该使用-std=c++1z作为标志。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48445191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档