DTF:
DTF> Где в стандарте перечислены условия, при которых для конструирования объекта выбирается move-конструктор?
Если я ничего не забыл, то за исключением специальных случаев, описанных в [class.copy.elision], выбор делается по тем же правилам разрешения перегрузки, что и для обычных функций с rvalue reference параметром. Кандидаты формируются по [over.match.ctor] или [over.match.copy] в зависимости от контекста инициализации — см. [dcl.init].
DTF>Он не компилируется, т.к. у TOnlyMovable удален копирующий конструктор, а перемещающий конструктор (в строке "TOnlyMovable m(object);") почему-то не вызывается.
DTF>Почему?
DTF>Казалось бы, несмотря на то, что object — это lvalue
Вот потому и не компилируется. Чтобы проинициализировать rvalue ссылку перемещающего конструктора TOnlyMovable, lvalue типа TOnlyMovable в качестве инициализатора использовать нельзя — см. [dcl.init.ref]. А вот rvalue такого же типа — можно:
void foo(TOnlyMovable&& object) {
TOnlyMovable m(std::move(object));
}