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 に答える