clang 3.6倍左右表达

clang 3.6 fold expression left/right

本文关键字:左右 6倍 clang      更新时间:2023-10-16

我正在尝试clang 3.6'-std=c++1z'的fold表达式,但我不太明白。我正在测试的功能是:

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方案,如图所示。

... - args将是一元左折叠,并按所需方向展开。