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

标签 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 上编译它时,它失败了,说

error: no viable constructor or deduction guide for deduction of template arguments of 'function'

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

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

我还验证了 std::pair 的类型推导是有效的,所以我无法判断是否:

  1. 在处理交叉编译器时,我以某种方式搞砸了我的工具链。
  2. Apple 的工具链中缺少此类的演绎指南。
  3. 我正在运行一个旧的工具链(我不知道如何检查它)
  4. ...(任何其他原因)

最佳答案

如果我们查看 libc++ status page,看起来 libc++ 还没有完全支持所有推导指南。它说带来的建议 this specific deduction guide进行中:

P0433R2| LWG Toward a resolution of US7 and US14: Integrating template deduction for class templates into the standard library |Kona| In progress

this godbolt session看使用 -stdlib=libc++ 时 clang 失败,但使用 -stdlib=libstdc++ 时则不会。

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

我们现在有一个错误报告 Bug 39606: std::function does not have deduction guides .

关于C++17 <functional> 模板参数推导不适用于 Xcode 10.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53217511/

相关文章:

c++ - 从 C++ QML 类型访问 QML 根对象

c++ - c和c++上下文中静态、自动、全局和局部变量的区别

java - 在 C++ 或 Java 中以响应模式使用 cmd

ios - 如何使UIButton看起来像电子邮件链接按钮?

Xcode调试器: Why is it only showing me assembler?

c++ - 在 C++ 中使用超时处理程序实现定时器

c++ - 当矩阵不是奇异时,lapack cgesv 出错

ios - Objective-C 更改 Sprite 表 - 麻雀

ios - 在 Xcode 崩溃报告中发现问题

xcode - 无法将字符串类型的值转换为预期的参数类型 soundex