https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99117
--- Comment #11 from Jonathan Wakely <redi at gcc dot gnu.org> --- So is Jakub wrong in comment 5 when he suggests that this should "lose" the __restrict__ qualification? _Tp* __p (__a._M_data); Is there a better way to drop that qual so that we can assign something to the elements of __a._M_data that aliases itself? Presumably this would be guaranteed to work? _Tp* __p (__a._M_data); for (size_t __i = 0; __i < __n; ++__i, ++__p) { _Tp __tmp = __e[__i]; *__p = __tmp; }