Каждое выражение в С++ 11 имеет категорию значений. Один из значений lvalue, xvalue или prvalue.
Есть ли способ написать макрос, который, учитывая любое выражение в качестве аргумента, приведет к созданию строки "lvalue", "xvalue" или "prvalue", если это необходимо?
Например:
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
}
Как реализовать VALUE_CAT
?