https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93872
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> --- We have: template<bool _IsMove> struct __copy_move<_IsMove, true, random_access_iterator_tag> { template<typename _Tp> _GLIBCXX20_CONSTEXPR static _Tp* __copy_m(const _Tp* __first, const _Tp* __last, _Tp* __result) { and: template<bool _IsMove, typename _Tp> _GLIBCXX14_CONSTEXPR inline void* __memmove(_Tp* __dst, const _Tp* __src, size_t __num) which use a const source, so can never move.