2015-03-02 3 views
7

Ich versuche den Faltenausdruck mit clang 3.6 '--std = C++ 1z', aber etwas, das ich nicht ganz verstehe. Die Funktion, die ich Tests sind, ist:clang 3.6 fache Ausdruck links/rechts

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

nach n4191, erwarte ich es als linke Falte

(10 - 3) - 2 

das Ergebnis 5, jedoch erweitert gibt, ist das Ergebnis 9, was scheint eine richtige Falten Erweiterung zu sein, dh

10 - (3 - 2) 

Fehle ich etwas oder missversteht n4191? Danke

Antwort

6

n4191 wurde von n4295 überarbeitet. Demnach ist ein Ausdruck der Form (e op ...) ein unärer rechter Falz, und dieser wird erweitert als: E1 op (... op (EN-1 op EN)), d. H. Als eine rechtsfache Erweiterung.

Dies scheint die Umkehrung dessen zu sein, was n4191 in Bezug auf die Faltrichtung angegeben hat. Clang 3.6 implementiert den n4295-Vorschlag wie gezeigt here.

... - args wäre ein unäre linke Falte und erweitern Sie in der gewünschten Richtung.

Verwandte Themen