我一直在使用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的类型推导工作,所以我不知道是否:
答案 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的错误报告。