C 14 lambda的默认参数类型推导取决于前面的参数
这不是C 14的有效期吗?
auto f = [](auto x,auto y = std::decay_t<decltype(x)>{}) { }; f(0); 我期待它大致相当于 auto f = [](int x,int y) { }; f(0,int{}); GCC 6.3和Clang 4.0都没有接受我的代码. > http://ideone.com/b7b4SK海湾合作委员会 是否与我对C模板扣除阶段缺乏了解有关? 1400页长规格实际上对我的问题有明确的答案吗? 更新 总而言之,我的问题实际上可以简化为这段代码(不含lambda,单个参数),并且在C 14下无效(感谢@BaummitAugen和@NirFriedman) template <typename T> void f(T x = 0) { } int main() { f(); } 解决方法
编译器拒绝你的代码是正确的,它确实无效C 14.
在标准中(在这里使用N4141)我们有
(5.1.2 / 4 [expr.prim.lambda]).所以你的电话相当于打电话给某些人 template <class T1,class T2> auto operator() (T1 x,T2 y = std::decay_t<decltype(x)>{}); 现在
(14.8.2 / 4 [temp.deduct.type])和
(14.8.2 / 5 [temp.deduct.type])使你的电话不正常. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |