std::move_if_noexcept的定义如下(C++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)的move构造函数不抛出,或者x不是可复制的,那么x就会转换为rvalue。这让我想知道是否有任何常见的不可复制类型,但其移动构造函数可能会抛出。
在标准库中,我检查了不可复制类型unique_ptr、future、promise、各种互斥类型、unique_lock、condition_variable和packaged_task,除非我误读了标准,否则它们都声明了它们的移动操作noexcept。
在标准库(C++11或C++14)或常用的第三方库(例如Boost)中,是否存在移动操作可能抛出的唯一移动类型?
发布于 2014-01-31 09:18:41
fstream类是未声明not的移动构造函数的示例,并且复制构造函数已删除:ofstream
https://stackoverflow.com/questions/21473649
复制相似问题