我一直在使用 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)>
}
Run Code Online (Sandbox Code Playgroud)
它在该页面上的基于 Web 的编译器中编译并运行良好,但是当我尝试在我的 Macbook Pro 上编译它时,它失败了,说
错误:没有可行的构造函数或推导指南来推导“函数”的模板参数
我已经在设置为 C++17 的 Xcode (v10.1) 项目中尝试过它,并且直接使用 -std=c++17 运行 clang。
我还在不同的在线编译器上编译了上面的例子,比如这里:https : //godbolt.org/z/ERliha
我还验证了 std::pair 的类型推导工作,所以我不知道:
看来libc++还没有完全支持所有的推导指南,如果我们查看libc++状态页面,它会说带来这个特定推导指南的提案正在进行中:
P0433R2| LWG 迈向 US7 和 US14 的决议:将类模板的模板推导集成到标准库 |Kona| 进行中
我们从这个 godbolt 会话中看到clang 在使用时会失败-stdlib=libc++,但在使用时不会失败-stdlib=libstdc++。
对 libc++ 进行推导指南的提交并不表示对 std::function 的任何提交。
我们现在有一个针对此Bug 39606 的错误报告:std::function 没有推导指南。
| 归档时间: |
|
| 查看次数: |
866 次 |
| 最近记录: |