bar(std::move(*it)); // kosher?
Не так, как вы намереваетесь. Вы не можете переместить объект const
. И std::initializer_list
обеспечивает доступ к своим элементам const
. Таким образом, тип it
равен const T *
.
Ваша попытка вызвать std::move(*it)
приведет только к l-значению. IE: копия.
std::initializer_list
ссылается на статическую память. Для этого и предназначен класс. Вы не можете перемещать из статической памяти, потому что движение подразумевает его изменение. Вы можете копировать только его.