clang 3.6 fold expression left/right

孤街醉人 提交于 2019-12-19 02:03:28

问题


I'm trying the fold expression with clang 3.6 '--std=c++1z', but something I don't quite get. The function that I'm testing is:

auto minus = [](auto... args) { return (args - ...); };
...
std::cout << minus(10, 3, 2) << std::endl;

according to n4191, I'm expecting it expands as a left fold to

(10 - 3) - 2

which gives result 5, however, the result is 9, which seems to be a right fold expansion, i.e.

10 - (3 - 2)

Am I missing anything or mis-understand n4191? Thanks


回答1:


n4191 was revised by n4295. According to that, an expression of the form (e op ...) is a unary right fold, and that is expanded as: E1 op (... op (EN-1 op EN)), i.e. as a right fold expansion.

This does seem to be the reverse of what n4191 stated in terms of the fold direction. Clang 3.6 implements the n4295 proposal, as shown here.

... - args would be a unary left fold and expand in the direction you want.



来源:https://stackoverflow.com/questions/28805431/clang-3-6-fold-expression-left-right

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!