Проблема не в перемещении std :: any, а в том, что сам std :: any не поддерживает типы только для перемещения (например, std :: unique_ptr)
согласно cppreference
template< class ValueType >
any( ValueType&& value );
Создает объект с начальным содержимым объект типа std::decay_t< ValueType>
, с прямой инициализацией из std::forward< ValueType>(value)
. Если std::is_copy_constructible< std::decay_t< ValueType>>::value
равно false
, программа некорректна
Вы можете проверить, что is_copy_constructible ... false с static_assert, см. coliru
Самый простой обходной путь, который я могу придумать, - это использовать shared_ptr и при этом вызывать std :: move.