#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>;
}
Output:
111
在最后一个例子中,根据值类别,A().x 是一个 xvalue,因此 decltype 不应该返回 double&&。
在 en.cppreference.com/w/cpp/language/decltype 的代码片段中测试过 gcc7.1、gcc5.2、clang3.8、gcc4.9、gcc4.8 和 gcc4.7。xvalue
a.m,即对象表达式的成员,其中 a 是 rvalue,m 是非引用类型的非静态数据成员;
...
double&&
,除非cppreference.com错了... - songyuanyao