Я пытаюсь ответить на свой вопрос с кучей ссылок на стандарт.
Я совершенно уверен, что я напишу что-то, что ужасно неправильно, и кто-то придет со мной.
Ну, я сделал все возможное, чтобы объяснить, как можно вывести из стандарта то, что описано в вопросе.
Не стесняйтесь, если нужно, вниз, но, пожалуйста, дайте мне знать, что не так, чтобы иметь возможность исправить ответ и понять ошибку.
Спасибо.
3.9/8 (типы):
тип объекта является (возможно, резюме квалифицированным) типа, который не является тип функции, а не ссылочный типа, а не резюме void.
5.2.2/10 (выражения, вызов функции):
Вызов функции является [...] к xvalue, если типом результата является ссылкой на Rvalue типа объекта
Таким образом std::move
является выражением xvalue в обоих случаях.
5.18/3 (назначение):
Если левый операнд не является тип класса, выражение неявно преобразуется [...] в сорте-неквалифицированный тип левого операнда.
Это не добавляет полезной информации, но это ради полноты.
4.1/2 (именующего к RValue конверсии):
В противном случае, если Т имеет тип класса, преобразование копирование инициализирует временный тип Т от glvalue и результата преобразования является приоритетом для временного.
В противном случае значение, содержащееся в объекте, обозначенном glvalue, является результатом prvalue.
12.2 (временные объекты) делает все остальное.
Итак, как упоминалось в комментариях @xaxxon, я на самом деле пытался (позвольте мне написать) 42 = 0;
, и это не допустимое выражение в C++.
Как правильно указан в комментариях по @bogdan, правая часть стандарта, к которому следует относиться в этом случае 5.18/1 (Назначение):
Все требуют изменяемого именующее выражения в качестве левого операнд [...]
Хотя 5/2 и 5/3 уточнить, что заявление касается только встроенных операторов.
Это эквивалентно 's.operator = (S {})', и созданный компилятором 'operator =' определяется без ref-qualifier, поэтому он связывается с lvalues и rvalues, как обычный метод. –
Вы говорите, что стандарт не определяет его для типов неклассов, чтобы связывать как с lvalues, так и с rvalues? Можете ли вы дать больше (все) детали, предоставив ответ? Приветствуются ссылки на стандарт. – skypjack
Неспособность назначить значения встроенного типа полностью возвращается к C. –