Почему не следует применять правило для доступа к членам класса с выражением объекта xvalue [expr] /7.3 к ссылочным типам?
Вместе с [expr.ref] / 4
«Если объявлено, что E2 имеет тип« ссылка на T », тогда E1.E2 - это lvalue; тип E1.E2 - T.»
информация об истечении срока действия изменена без очевидной причины.
Кто-нибудь знает причину этого решения?
#include <utility>
int i;
struct { int && m; } a { std::move (i) };
typedef decltype ((std::move (a).m)) M;
// M is int &, not &&
static_assert ((std::is_same <M, int &>::value), "");
int main () {}
Я предполагаю, что меня беспокоит в первую очередь то, что это нарушает тривиальное решение для пересылки членов класса:
template <typename U> auto f (U && u)
-> decltype ((static_cast <U &&> (u).m))
{
return static_cast <U &&> (u).m;
}
без каких-либо очевидных альтернатив, за исключением обращения к более сложным решениям свойств типов.