changing a type into a reference to a type, allows one to access the members of the type without creating an instance of the type. This seems to be true for bot
You want to be able to get back aT, a T&, or const/volatile qualified versions thereof. Since may not have a copy or move constructor, you can't just return the type, i.e., a reference needs to be returned. On the other hand, adding an rvalue teference to a reference type has no effect;
std::declval -> T&&
std::declval -> T&
That is, adding an rvalue reference type has the effect of yielding a result which looks like an object of the passed type!