https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91541

--- Comment #10 from Jonathan Wakely <redi at gcc dot gnu.org> ---
I don't think it's possible to construct an example where this would misbehave.

If allocator_traits<X>::is_always_equal is true for X then it implies that
operator== will return true for all values of X, **and also** for any values of
Y that are constructed from values of X.

Even if allocator_traits<Y>::is_always_equal is actually false (because some
values of Y can compare non-equal), **for the specific values we care about**
(i.e. ones constructed by copying an X), operator== will always return true.
That means we don't need to reallocate, and so no exceptions are possible.

What really matters is whether we need to reallocate, **not** whether
allocator_traits<Y>::is_always_equal is true or not. As long as we don't
reallocate, we won't get exceptions, and so we won't try to throw from a
noexcept function.

So you're worrying about nothing and wasting your time and mine.

Reply via email to