https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113202
--- Comment #8 from Andrew Pinski <pinskia at gcc dot gnu.org> --- The assumption is first and last are part of the same iterator which means in the case of pointers, it needs to be addresses inside the array or one element past the array. Everything else is undefined. It just happens to work for msvc's library does not mean it is defined code.