Здравствуйте, N. I., Вы писали:
NI> тип выражения — decltype((object)).
Но ведь (object) это lvalue типа TOnlyMovable, а для lvalue типа T, тип, обозначаемый decltype, является T&. В данном случае — TOnlyMovable&.
Как понимать тогда Ваши процитированные слова? Ведь decltype дал тип, который не совпадает ни с типом, которое выражение имело initially (TOnlyMovable&&), ни с TOnlyMovable, как этого требует пункт про удаление ссылочности у типа выражения.
NI>If an expression initially has the type “reference to T” (8.3.2, 8.5.3), the type is adjusted to T prior to any further analysis. The expression designates the object or function denoted by the reference, and the expression is an lvalue or an xvalue, depending on the expression.
Довольно мерзенькое правило. Непонятно, что значит initially. Т.е. да, есть несколько пунктов, два из которых Вы процитировали, которые говорят о том, что типом выражения может быть ссылка и это правило снимает ссылочность. Но, на мой взгляд, проще в тех правилах сразу говорить, что типом выражения с идентификатором или вызовом функции будет тип идентификатора или тип возвращаемого значения, но избавленный от "ссылочности".
initial-тип выражения, насколько я знаю, ненаблюдаем нигде.