[PATCH] Fix PR libstdc++/13462 std::set's pointer is not right
Matt Austern
austern@apple.com
Tue Dec 23 03:15:00 GMT 2003
On Dec 22, 2003, at 5:59 PM, Bo Persson wrote:
>
> ----- Original Message -----
> From: "Nathan Myers" <ncm-nospam@cantrip.org>
> To: <libstdc++@gcc.gnu.org>
> Sent: Monday, December 22, 2003 6:24 PM
> Subject: Re: [PATCH] Fix PR libstdc++/13462 std::set's pointer is not
> right
>
>
>> On Mon, Dec 22, 2003 at 08:19:06AM -0800, Andrew Pinski wrote:
>>> The problem is that std::set's pointer is defined based on
>>> _Rep_type::const_pointer and not _Rep_type::pointer.
>>> This patch fixes that and others in libstdc++.
>>>
>>> ChangeLog:
>>> * include/bits/stl_multiset.h (__gnu_norm::multiset::pointer):
>>> Define based on pointer and not const_pointer.
>>> * include/bits/stl_set.h (__gnu_norm::set::pointer): Likewise.
>>> * include/ext/hash_set (__gnu_ext::hash_set::pointer): Likewise.
>>> (__gnu_ext::hash_multiset::pointer): Likewise.
>>
>> I'm not sure this is right. The problem is that the elements of a
>> std::set<> are supposed to be immutable. Exposing a non-const pointer
>> to the elements breaks that property.
>
>
> I think that problem is with iterator/const_iterator. Another issue.
>
> The standard defines pointer and const_pointer, which are then
> otherwise not
> used by the containers.
It's also all mostly irrelevant. It only matters if users supply
an allocator where Alloc::pointer is something other than
Alloc::value_type*. In principle this is allowed by the standard
(sort of). In practice, if we want to support it we have to do a
fair amount of work. Changing the container's pointer type is the
least of it.
(I can get into details of what we'd have to do, if anyone is
curious.)
--Matt
More information about the Libstdc++
mailing list