C ++ 17 <functional>模板参数推论不适用于Xcode 10.1

时间:2018-11-08 23:05:33

标签: c++ xcode

我一直在使用C ++ 17(及更高版本)进行模板参数推导,并试图从cppreference.com编译这个确切的示例

#include <functional>

int func(double) { return 0; }
int main() {
  std::function f{func}; // guide #1 deduces function<int(double)>
  int i = 5;
  std::function g = [&](double) { return i; }; // guide #2 deduces function<int(double)>
}

它可以在该页面上的基于Web的编译器中编译并正常运行,但是当我尝试在Macbook Pro上编译它时,它失败了,说

  

错误:没有可行的构造函数或推论指南来推论“函数”的模板参数

我已经在设置为C ++ 17的Xcode(v10.1)项目中进行了尝试,并且仅使用-std = c ++ 17直接运行clang。

我还在不同的在线编译器上编译了上面的示例,例如:https://godbolt.org/z/ERliha

我还验证了std :: pair的类型推导工作,所以我不知道是否:

  1. 当我与交叉编译器混淆时,我以某种方式弄乱了工具链。
  2. Apple的工具链中缺少此类的推导指南。
  3. 我正在使用旧的工具链(我不知道如何检查)
  4. ...(任何其他原因)

1 个答案:

答案 0 :(得分:3)

libc ++似乎还不完全支持所有推论指南,如果我们看一下libc++ status page,它说带来this specific deduction guide的提议正在进行中。

  

P0433R2 | LWG达到US7和US14的决议:将类模板的模板推论集成到标准库中| Kona |进行中

使用-stdlib=libc++时,我们从this godbolt session中看到叮当声,但使用-stdlib=libstdc++时却没有。

commits to libc++ for deduction guides不表示对std :: function的任何提交。

我们现在有关于此Bug 39606: std::function does not have deduction guides的错误报告。