#include <iostream>
#include <type_traits>
struct A { double x; };
int main()
{
const A && a1 = A();
std::cout << std::is_same_v<decltype((a1.x)), const double&>;
std::cout << std::is_same_v<decltype((std::move(a1).x)), const double&&>;
std::cout << std::is_same_v<decltype((A().x)), double>;
}
Shouldn't decltype in the last example return double&& since according to value categories. A().x is an xvalue
xvalue
a.m, the member of object expression, where a is an rvalue and m is a non-static data member of non-reference type;
...
Aucun commentaire:
Enregistrer un commentaire