C++ 叮当声3.6倍表情左/右

C++ 叮当声3.6倍表情左/右,c++,clang,clang++,c++17,C++,Clang,Clang++,C++17,我正在尝试使用叮当声3.6'-std=c++1z'的折叠表达式,但有些东西我不太明白。我正在测试的功能是: auto minus = [](auto... args) { return (args - ...); }; ... std::cout << minus(10, 3, 2) << std::endl; 结果是5,但结果是9,这似乎是一个右折叠展开,即 10 - (3 - 2) 我是否遗漏了什么或误解了n4191? 谢谢n4191已由修订。据此,形式为(e o

我正在尝试使用叮当声3.6'-std=c++1z'的折叠表达式,但有些东西我不太明白。我正在测试的功能是:

auto minus = [](auto... args) { return (args - ...); };
...
std::cout << minus(10, 3, 2) << std::endl;
结果是5,但结果是9,这似乎是一个右折叠展开,即

10 - (3 - 2)
我是否遗漏了什么或误解了n4191? 谢谢

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

这似乎与n4191所述的褶皱方向相反。Clang 3.6实现了n4295方案,如图所示

args
将是一个一元左折叠,并按您想要的方向展开

10 - (3 - 2)