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

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|WAITING                     |RESOLVED
         Resolution|---                         |INVALID

--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Jonathan Wakely from comment #1)
> Your allocators *always* compare unequal to all other instances of the same
> allocator. This is invalid, a copy-constructed allocator must compare equal
> to the original, and be able to deallocate its memory.

See the rows defining equality comparison and copy construction at
http://en.cppreference.com/w/cpp/named_req/Allocator#Requirements

Allocator propagation rules do not mean that the same specific instance of the
allocator must be used for all allocations and deallocation, only one that
compares equal to the original one. With your allocator that's obviously
impossible, because no allocators ever compare equal (even when you compare an
allocator to itself!)

Stateful allocators need to be a lightweight handle for some allocation
resource managed elsewhere, and two allocators compare equal if they use the
same resource. That means that you should never depend on the identity (i.e.
address) of allocator objects, only on their equivalence (as determined by
operator==).

Having looked at your code further, the test is simply completely broken. When
an allocator propagates on copy assignment the allocator gets assigned, so that
the "value" of the new allocator replaces the "value" of the old allocator.
That doesn't change the allocator's address. The object still has the same
address, it just gets a new "value". But your allocators don't have any "value"
they only care about their identity (i.e. address). This report is INVALID.


(In reply to Jonathan Wakely from comment #2)
> You know you can just not name a parameter, instead of casting it to void?

Ah yes, I see you've done that elsewhere.

Reply via email to