C++1z unique_ptrのテンプレート代入演算子に、不足していたSFINAEルールを追加

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の以下の階層の下に解説ページを用意する予定です。