https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65101
--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> --- i.e. __new_finish = pointer() is used as a check-point so the catch-block knows whether an exception was thrown by _Alloc_traits::construct() or by __uninitialized_move_if_noexcept_a(). That avoids having two try-catch blocks.