用c ++ 17 mac编译

时间:2018-01-25 14:25:23

标签: c++ macos gcc g++ clang++

我无法使用-std = c ++ 17进行编译,我得到了:

error: invalid value 'c++17' in '-std=c++17'

但是我更新了Xcode和clang。

My Clang版本是:

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`

我加载最新的标题就像可选,我必须做

 #include <experimental/optional>

而不是

 #include <optional>

4 个答案:

答案 0 :(得分:4)

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

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

的原因

为了使用Xcode 9.2附带的编译器来支持c ++ 17,你需要使用-std=c++1z标志。

Xcode 9.3将附带Apple LLVM version 9.1.0 (clang-902.0.30),它支持-std=c++17标志。但是,optional标题截至今天仍位于experimental/子目录下。这可能会在测试期间发生变化。

答案 1 :(得分:1)

以下是我通过此测试得到的结果:

#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版本比你更新

Target: x86_64-apple-darwin17.4.0

答案 2 :(得分:1)

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

答案 3 :(得分:0)

从macOS 15开始支持c ++ 17的libc ++