clang 3.6倍表达左/右

时间:2015-03-02 08:32:28

标签: 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;

根据n4191,我希望它可以扩展为左侧折叠

(10 - 3) - 2

给出结果5,然而,结果是9,这似乎是一个正确的倍数扩张,即

10 - (3 - 2)

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

1 个答案:

答案 0 :(得分:6)

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

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

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