È std :: array mobile?È std :: array mobile?
In Bjarne Native 2012 presentation slides (diapositiva 41) elenca std :: array come uno dei soli contenitori che non è mobile.
Un rapido sguardo sul codice gcc 4.8 librerie fonte sembra confermare che std :: array è non mobile:
std :: vector:
/* @brief %Vector move constructor.
... */
vector(vector&& __x) noexcept
: _Base(std::move(__x)) { }
mentre in std :: array di l'unico metodo che riceve un parametro di riferimento rvalue è l'accesso casuale elemento, che evita un ritorno copiando:
get(array<_Tp, _Nm>&& __arr) noexcept
{ /*...*/ return std::move(get<_Int>(__arr)); }
è la mossa costruttore & move-assignement per std :: array defaulted created, o è std :: array unmovable? Se è inamovibile, perché std :: array non può essere spostato mentre std :: vector può?
Come punto di interesse, la presenza o l'assenza da sola di un costruttore di movimento non è sufficiente per stabilire che un tipo è o non è spostabile (se si utilizza la vista espressione/concetti sull'argomento, come la maggior parte Comune). Allo stesso modo per l'assegnazione del movimento. –