clang 3.6倍表达左/右

Ral*_*ang 7 c++ clang clang++ c++17

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

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

根据n4191,我期待它作为左折叠扩展

(10 - 3) - 2
Run Code Online (Sandbox Code Playgroud)

然而,给出结果5,结果是9,这似乎是正确的折叠扩展,即

10 - (3 - 2)
Run Code Online (Sandbox Code Playgroud)

我错过了什么或误解了n4191吗?谢谢

int*_*jay 6

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

这似乎与n4191在折叠方向上所述的相反.锵3.6实现了n4295建议,如图所示这里.

... - args将是一个一元的左折叠,并在你想要的方向扩展.