我正在尝试使用clang 3.6'--std = c++ 1z'折叠表达式,但是我不太了解。我正在测试的功能是:

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

根据n4191,我希望它会向左折叠扩展到
(10 - 3) - 2

得出结果5,但是结果是9,这似乎是正确的倍数展开,即
10 - (3 - 2)

我是否遗漏了任何东西或误解了n4191?
谢谢

最佳答案

n4191已由n4295修改。据此,(e op ...)形式的表达式是一元右折叠,并且被扩展为:E1 op (... op (EN-1 op EN)),即,作为右折叠扩展。

这似乎与n4191的折叠方向相反。 Clang 3.6实现了n4295建议,如here所示。
... - args将是一元左折并向您想要的方向扩展。

09-08 09:46