КОгда выбирается move-constructor?
От: DTF  
Дата: 06.07.17 18:47
Оценка:
Добрый вечер?

Короткий вопрос:
Где в стандарте перечислены условия, при которых для конструирования объекта выбирается move-конструктор?
Сам не нахожу


Тот же вопрос подробнее:
Вот есть код:
class TOnlyMovable {
public:
    TOnlyMovable() = default;
    TOnlyMovable(TOnlyMovable&&) {}
};

void foo(TOnlyMovable&& object) {
    TOnlyMovable m(object);
}


int main() {
    foo( TOnlyMovable() );
    return 0;
}


Он не компилируется, т.к. у TOnlyMovable удален копирующий конструктор, а перемещающий конструктор (в строке "TOnlyMovable m(object);") почему-то не вызывается.
Почему?
Казалось бы, несмотря на то, что object — это lvalue (я не ошибаюсь тут?), его тип — rvalue reference,
из чего можно сделатть вывод, что перемещать из этого объекта можно и нужно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.