【发布时间】:2018-02-10 14:05:22
【问题描述】:
按照标准,std::optional<T>的拷贝构造函数:
...应定义为删除,除非
is_copy_constructible_v<T>是true。
但是std::optional<T>的移动构造函数:
...除非
is_move_constructible_v<T>是true,否则不应参与重载决议。
作为我understand deleted constructors,不删除std::optional<T> 的移动构造函数的目的是允许这样的代码:
std::optional<X> o1;
std::optional<X> o2(std::move(o1));
...依靠一些转换序列来工作 - o2 将由使用 std::optional<X>&& 构造的 A 类型的对象构造(如果我错了,请纠正我)。
但是关于std::optional 的可能构造函数,我很难找出一个可以匹配这个用例的...
如果T 不可移动构造,为什么std::optional<T> 的移动构造函数根本没有删除?
【问题讨论】:
标签: c++ optional move-constructor