unique_ptr
の以下の代入演算子に、オーバーロード解決に参加する条件が不足していました。
template <class U, class E> unique_ptr& operator=(unique_ptr<U, E>&& u) noexcept;
C++14時点では、以下の2つの条件になっています。
unique_ptr<U, E>::pointer
が、pointer
に暗黙変換可能な型であること。U
が配列型ではないこと。
C++1zでは、これに以下の条件が追加されます。
is_assignable_v<D&, E&&>
がtrue
であること
参照
お断り
この記事の内容は、C++1zが正式リリースされる際には変更される可能性があります。正式リリース後には、C++日本語リファレンスサイトcpprefjpの以下の階層の下に解説ページを用意する予定です。