c – 编译器错误,还是非标准代码? – lambda中的变异模板捕获

c – 编译器错误,还是非标准代码? – lambda中的变异模板捕获,第1张

概述我有以下C 11代码; template<typename... T>int g(T... t){ return 0;}template<class... Args>void f(Args... args){ auto lm = [&, args...] { return g(args...); }; lm();}int main(){ f(2 我有以下C 11代码;
template<typename... T>int g(T... t){    return 0;}template<class... Args>voID f(Args... args){    auto lm = [&,args...] { return g(args...); };    lm();}int main(){    f(2,5,7);}

据我所知,我相信这是有效的C 11.标准第5.1.2.23节;

A capture followed by an ellipsis is a
pack expansion (14.5.3). [ Example:

06001

— end example ]

然而,当Clang编译好时,G提供了这个错误;

main.cpp: In function 'voID f(Args ...)':main.cpp:10:23: error: expected ',' before '...' token     auto lm = [&,args...] { return g(args...); };                   ^main.cpp:10:23: error: expected IDentifIEr before '...' tokenmain.cpp:10:26: error: parameter packs not expanded with '...':     auto lm = [&,args...] { return g(args...); };                      ^main.cpp:10:26: note:         'args'main.cpp: In lambda function:main.cpp:10:43: error: expansion pattern 'args' contains no argument packs     auto lm = [&,args...] { return g(args...); };                                       ^main.cpp: In instantiation of 'struct f(Args ...) [with Args = {int,int,int}]::__lambda0':main.cpp:10:49:   required from 'voID f(Args ...) [with Args = {int,int}]'main.cpp:16:14:   required from heremain.cpp:10:19: error: using invalID fIEld 'f(Args ...)::__lambda0::__args'     auto lm = [&,args...] { return g(args...); };                   ^

所以我的问题很简单,这是G中的编译器错误吗?

解决方法 看起来GCC尚未实施支持.反之亦然,你不能在包扩展中有一个lambda(每个包生成一个lambda参数).看起来这两个功能根本不能一起玩.

如果您只是使用[&],那么有一个更有用的错误消息:

sorry,unimplemented: use of ‘type_pack_expansion’ in template

免责声明:我的GCC副本建于7月底;我可能应该升级了.

总结

以上是内存溢出为你收集整理的c – 编译器错误,还是非标准代码? – lambda中的变异模板捕获全部内容,希望文章能够帮你解决c – 编译器错误,还是非标准代码? – lambda中的变异模板捕获所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1244418.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存