Jeder Ausdruck in C++ 11 hat eine Wertkategorie. Einer von Lvalue, xvalue oder prvalue.Empirisch Wertkategorie von C++ 11 Ausdruck bestimmen?
Gibt es eine Möglichkeit, einen Makro zu schreiben, der bei jedem Ausdruck als Argument die Zeichenfolge "lvalue", "xvalue" oder "prvalue" erzeugt?
Zum Beispiel:
int main()
{
int x;
cout << VALUE_CAT(x) << endl; // prints lvalue
cout << VALUE_CAT(move(x)) << endl; // prints xvalue
cout << VALUE_CAT(42) << endl; // prints prvalue
}
Wie kann VALUE_CAT
umgesetzt werden?
Etwas in der Form von '#define VALUE_CAT (expr) get_value_description (sizeof SFINAE_test_1 ((expr)), sizeof SFINAE_test_2 ((expr)))' –
Ich habe mir das ausgedacht, aber ich glaube nicht, dass das zweite ein ist glvalue ... http://ideone.com/ARlW3v –
@BenVoigt Ich glaube nicht, dass eine Lösung mit Überladungsauflösung funktionieren kann, weil ein Überladungssatz einen xvalue nicht von einem prvalue unterscheiden kann. Es ist schade, weil es möglich gewesen wäre, ein Makro insgesamt zu vermeiden (z. B. Überladen von "conexpr" -Funktionen). (Eigentlich bin ich wirklich froh, dass das nicht der Fall ist, würde die Überladungsauflösung komplizierter machen als es schon ist!) –