c++17 map::extract 方法在 macOS 上可用吗?

Posted

技术标签:

【中文标题】c++17 map::extract 方法在 macOS 上可用吗?【英文标题】:Is the c++17 map::extract method available on macOS? 【发布时间】:2018-10-16 10:42:02 【问题描述】:

参考这个答案:

https://***.com/a/44883472/9620309

即使使用最新的 XCode Beta (10.1),此功能似乎也无法在 macOS High Sierra 上使用?

我假设最新的 Apple-clang (10.0.0) 现在应该支持 C++17,但是当我使用 c++17 标志编译时,它说 std:: 中没有名为 extract 的成员地图...

还是我错过了什么?

编辑(mcve): http://coliru.stacked-crooked.com/a/78715cf9485374d8

// clang++ -std=c++17 -Wall -pedantic main.cpp
#include<map>
#include<string>
#include<algorithm>

int main() 
  std::map<int, std::string> m 10, "potato", 1, "banana" ;
  auto nodeHandler = m.extract(10);
  nodeHandler.key() = 2;
  m.insert(std::move(nodeHandler)); //   1, "banana" ,  2, "potato"  

【问题讨论】:

好吧,你肯定错过了minimal reproducible example,没有它,从逻辑上讲不可能权威地断定你的假设是否正确,或者你犯了某种不明显的错字;至少在不了解 clang 的 C++17 支持的情况下是这样的。 @SamVarshavchik 添加了 ... 请发布代码,而不是链接。 呃,为什么 Apple 在 clang 上粘贴自己的版本号?没有上游版本 10 clang(最新的 clang 是 7)这样的东西,所以理解它到底对应什么是一团糟...... @molbdnilo 你去... 【参考方案1】:

所以,为了回答我自己的问题,截至撰写本文之日,C++17 map::extract 方法在 macOS 上的默认 C++ 环境中不可用,即使是上面提到的最新测试版。

正如by Matteo above 指出的那样,它适用于非 Apple clang 7 和匹配的 libc++。

所以我目前的解决方法是使用自制软件中的 CMake 和 clang 7 来编译我需要的库,然后链接它。

【讨论】:

以上是关于c++17 map::extract 方法在 macOS 上可用吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何创建从 17 到 120 的数组 [重复]

LaTeX中如何定义使\section编译之后显示第一章,第二章这种

将matlab连接到c语言dll

MA323财经数学pytho算法

01背包问题变种:从给定的N个正数中选取若干个数之和最接近M的JAVA写法

mysql-python安装问题(在ma​​c os x lion上)