-Wconversion versus libstdc++

Paolo Carlini pcarlini@suse.de
Mon Jan 15 18:32:00 GMT 2007


Gabriel Dos Reis wrote:

>| However, in order not to mix different issues, I think we should try
>| first to resolve the much more limited issue at hand, which, I note,
>| has to do with *deallocation*, not with *allocation*.
>
>By the time we deallocate, any possible damage has already be done :-)
>So, yes, you can add the casts as a temporary work-around.
>  
>
Ok.

>We still would not have solved the issue (I do not believe we have
>separate issues).
>  
>
Well, the issue with max_size vs size vs difference_type certainly we 
don't have anywhere, besides my private emails with Howard ;) Certainly 
I want to tackle it but I'm not sure whether is purely an implementation 
(v3) issue: I don't think the standard is very clear about the value of 
max_size.

About v3, note that currently, similarly to other implementations I 
think, in v3 container::max_size does *not* return a value directly, but 
essentially forwards to allocator::max_size. In general, I think the 
allocator should be definitely involved, because it can well decide to 
return sizes much smaller than numeric_limits<size_type>::max_size / 
sizeof(T).

In summary, for v3, one possibility could be combining the two 
quantities, consistently for all the containers, thus, essentially, 
compute container::max_size as min(allocator::max_size, 
numeric_limits<difference_type>::max) (all the computations modulo 
sizeof(T)). In this way, we could be sure that, in vector for example, 
substracting the _M_start and _M_finish pointers doesn't overflow a 
ptrdiff_t (the latter finally is casted to a size_t in order to call 
allocator::deallocate). Do you agree with opening a separare v3 PR and 
tackling it along this route?

Paolo.



More information about the Libstdc++ mailing list