7

我正在尝试使用 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?谢谢

4

1 回答 1

6

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

这似乎与 n4191 在折叠方向方面所说的相反。Clang 3.6 实现了 n4295 提议,如下所示

... - args将是一元左折叠并沿您想要的方向展开。

于 2015-03-02T09:04:28.957 回答