问题描述
我试图在Xcode 12.0 Mac OS项目中使用std :: optional。我收到错误消息: 名称空间“ std”中没有名为“ optional”的模板
#include <optional>
std::optional<int> o;
我的设置是(我需要libc ++用于项目):
解决方法
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
可用。