如何在Xcode中获得std :: optional支持?

问题描述

我试图在Xcode 12.0 Mac OS项目中使用std :: optional。我收到错误消息: 名称空间“ std”中没有名为“ optional”的模板

#include <optional>

std::optional<int> o;

我的设置是(我需要libc ++用于项目):

enter image description here

解决方法

Apple作为Xcode 12(和11)的一部分提供的libc ++版本包括对许多C ++ 17功能的支持,包括optional。参见Xcode 11 release notes

Xcode中表示libc ++“支持C ++ 11”的文本与Apple以前提供的标准库(libstdc ++ v 4.2.1)相反,后者不支持C ++ 11。这并不意味着它仅支持C ++ 11,而排除了C ++ 14/17/20 / etc。

OP在评论中提到,他在导致问题的“其他标志”中有一个-std=gnu++11

,

std::optional类型是C ++ 17的功能。尽管您在设置中使用C ++ 17进行编译,但请仔细查看标准库版本。它指出您使用的版本最多仅支持C ++ 11。

升级您的媒体库以使用std::optional

或者,您可以尝试#include <experimental/optional>,看看您的图书馆是否有std::experimental::optional可用。