------- Additional Comments From igodard at pacbell dot net  2004-10-07 02:22 -------
For the record, the following was posted on comp.std.c++:

Try:
    std::allocator<const int> a;
This fails on gcc and is permitted in icc and the other EDG derivatives. While 
allocating const objects may seem non-sensical, that's what you do when you have 
a standard collection of const value type. And you have (or want to have) such a 
collection of const objects whenever you have a bunch of data that you want to 
put in a standard collection to use standard algorithms on (say for searching) 
but which will be (or should be) immutable once the collection is constructed.

g++ complains about the definition of the "address" function in std::allocator, 
and the g++ folks say (in response to the PR, bug #16875; see also #17866):

   "Invalid as 20.4.1 for allocator:

    pointer address(reference x) const;
    const_pointer address(const_reference x) const;"

However, the utility of the application is obvious and the utility of the 
restriction is not, so I propose that the library specification be changed to 
support allocators (and by implication collections) of const element type. 
Apparently icc uses a specialization of allocator to merge the declarations of 
"address" when the argument type is const, which is a pretty trivial fix. No 
existing code would be invalidated by the change.

Sincerely,

Ivan Godard

-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16875

Reply via email to