Является ли std:: array подвижным?
В Презентационные слайды Bjarne Native 2012 (слайд 41) перечисляет std:: array как один из единственных контейнеров, которые не могут перемещаться.
Быстрый взгляд на исходный код библиотеки gcc 4.8, похоже, подтверждает, что std:: array не перемещается:
std::vector:
/* @brief %Vector move constructor.
... */
vector(vector&& __x) noexcept
: _Base(std::move(__x)) { }
а в std:: array единственным методом, который получает параметр ссылки rvalue, является доступ к случайному элементу, что позволяет избежать возврата путем копирования:
get(array<_Tp, _Nm>&& __arr) noexcept
{ /*...*/ return std::move(get<_Int>(__arr)); }
Является ли move-constructor и move-assignement для std:: array defaulted created или std:: array unmovable? Если он невозможен, почему std:: array не может быть перемещен, а std::vector может?