std :: arrayは移動可能ですか?
Bjarne Native 2012のプレゼンテーションスライド(スライド41)ではstd::array
、移動できない唯一のコンテナーの1つとしてリストされています。
gcc 4.8ライブラリのソースコードをざっと見てみると、std::array
移動できないことが確認されているようです。
std :: vector:
/* @brief %Vector move constructor.
... */
vector(vector&& __x) noexcept
: _Base(std::move(__x)) { }
std :: arrayにある間、右辺値参照パラメーターを受け取る唯一のメソッドはランダム要素アクセスであり、これはコピーによる戻りを回避します。
get(array<_Tp, _Nm>&& __arr) noexcept
{ /*...*/ return std::move(get<_Int>(__arr)); }
std::array
デフォルトのmove-constructorとmove-assignmentは作成されていますか、それともstd::array
移動できませんか?動かせないのに、動かせないのになぜstd::array
動かせないのstd::vector
か?