Каков пример класса только для перемещения с операцией перемещения, которая может генерировать?

0

std::move_if_noexcept определяется следующим образом (С++ 11 20.2.3/7-8):

template <class T>
typename conditional<!is_nothrow_move_constructible<T>::value
                     && is_copy_constructible<T>::value,
                     const T&,
                     T&&
                    >::typemove_if_noexcept(T& x) noexcept;

Returns: std::move(x)

На простом английском языке move_if_noexcept(x) x в rvalue, если x move constructor не бросает или если x не является конструктивным. Это заставляет меня задаться вопросом, существуют ли общедоступные типы, которые не могут быть скопированы, но чей конструктор движений может бросить.

В стандартной библиотеке, я проверил uncopyable типы unique_ptr, future, promise, различные типов мьютекса, unique_lock, condition_variable и packaged_task, и, если я не неправильно понимаю стандарт, все они заявляют о своей операции перемещения noexcept.

Есть ли тип перемещения только в стандартной библиотеке (С++ 11 или С++ 14) или в часто используемой сторонней библиотеке (например, Boost), где могут выполняться операции перемещения?

  • 0
    Считаются ли векторы?
  • 0
    @remyabel: вектор копируемый.
Теги:
c++11
move-semantics

1 ответ

3
Лучший ответ

fstream являются примерами конструктора перемещения, не объявленного noexcept, и конструктор копирования удален: http://en.cppreference.com/w/cpp/io/basic_ofstream/basic_ofstream

Ещё вопросы

Сообщество Overcoder
Наверх
Меню