Ich versuche, ein einfaches Beispiel für eine Operation zu finden, die zu einem Rvalue führt.Warum ist das Ergebnis von "declltype (i + j)" keine rvalue-Referenz?
Dieser Testfall hätte funktionieren sollen, aber überraschenderweise (für mich) ist das Ergebnis der Addition von zwei int
s kein rvalue (Referenz). Was fehlt mir hier?
void test(int i, int j)
{
// this assert should pass, but fails:
static_assert(std::is_same<decltype(i + j), int&&>(), "i + j should be a rvalue");
// this assert passed, but should fail:
static_assert(std::is_same<decltype(i + j), int>(), "this assert should fail...");
}
Es ist nur Plain Old Data. Ich glaube nicht, dass du std :: move ein int .. – 0xbaadf00d
Dies war immer int, seit undenklichen Zeiten (a.k.a erste Unixe). Wie würdest du '2 + 2' bewegen? – bipll
Sie können sehr viel 'std :: move' ein' int' und das ist neben dem Punkt sowieso, das OP fragt nach der Wertkategorie von 'i + j'. –