用 c++17 编译 mac

Compile with c++17 mac

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

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

但是我更新了 Xcode 和 clang。

我的 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`

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

 #include <experimental/optional>

而不是

 #include <optional>

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

#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

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

Xcode 自带完整的工具链,包括 headers 和实际的编译器。

Apple LLVM version 9.0.0 (clang-900.0.39.2)(Xcode 9.2 附带)不支持使用标志 -std=c++17,因为它太旧了。可选 header 仅包含在文件夹 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 header 截至今天仍在 experimental/ 子目录下。这可能会在测试期间发生变化。

自 macos 15 起支持 c++17 的 libc++

-std=c++1z 也适用于 Apple LLVM 版本 8.1.0 (clang-802.0.42)