c++ - C++17模板参数扣除不适用于 Xcode 10.1
问题描述
我一直在玩 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 的类型推导有效,所以我不知道是否:
- 当我弄乱交叉编译器时,我以某种方式搞砸了我的工具链。
- Apple 的工具链中缺少此类的演绎指南。
- 我正在运行一个旧工具链(我不知道如何检查)
- ...(任何其他原因)
解决方案
看起来 libc++ 还没有完全支持所有的推导指南,如果我们查看libc++ 状态页面,它会说带来这个特定推导指南的提案正在进行中:
P0433R2| LWG 迈向 US7 和 US14 的决议:将类模板的模板推导集成到标准库中 |Kona| 进行中
我们从这个 Godbolt 会话中看到,使用时失败,-stdlib=libc++
但使用时没有-stdlib=libstdc++
。
对 libc++ 的演绎指南的提交并不表示对 std::function 的任何提交。
我们现在有一个关于这个错误 39606 的错误报告:std::function does not have deduction guides。
推荐阅读
- python - 删除/替换 GridSizer 中的项目?
- django - 自定义用户在数据库中没有密码
- python - 根据条件和输入参数替换行的值
- dynamics-crm - 是否可以在创建记录后同时运行同步和异步插件?
- java - 如何处理来自同一端点的不同 JSON 响应
- regex - Pandas,使用另一个数据帧值在数据帧中查找匹配的关键字
- c# - 在 AutoMapper 中,目标类型上的只读集合属性不会被自动忽略
- ios - 使用 Swift 跟踪 VPN 数据使用情况
- reactjs - 在世博会应用程序中卡住“下载 Javascript 包 100.00%”
- r - R Shiny:从选定的输入创建动态 UI