Boost logo

Boost :

Subject: Re: [boost] [Boost.Pool] TR1?
From: Phil Bouchard (philippe_at_[hidden])
Date: 2011-04-13 18:45:17


On 4/13/2011 3:26 PM, Dave Abrahams wrote:
> At Wed, 13 Apr 2011 14:17:15 -0700,
> Phil Bouchard wrote:
>>
>>> To make is_from work, we need a total, *specified* ordering for all
>>> pointers. I see no way to combine the above two to get a total specified
>>> ordering.
>>
>> There is s bug in the standards because according to 5.2.10/4 a
>> pointer can be converted to an integral type to later be ordered.
>> i.e.:
>>
>> struct Silly
>> {
>> bool is_from(const char* p)
>> {
>> return !std::less<long>()(reinterpret_cast<long>(p),
>> reinterpret_cast<long>(buffer))&&
>> std::less<long>()(reinterpret_cast<long>(p),
>> reinterpret_cast<long>(buffer + sizeof(buffer)));
>> }
>>
>> char buffer[1024];
>> };
>
> Stop, stop, seriously. That's not a bug, and your code isn't
> guaranteed to produce any particular result either, portably.
> reinterpret_cast has unspecified or implementation-defined results (I
> forget which) in this case.

It's implementation defined.

> If you don't believe me, take the question to some "higher authority"
> on the C++ core standard, such as you might find on comp.std.c++, but
> please stop wasting time arguing with me about it in this forum.

I did take the issue to comp.std.c++ but it was unclear whether is_from
was affected.

> I fear my whole point was missed: since there's no way to implement
> is_from in portable standard-compliant user code, it makes sense that
> (if it's actually broadly needed) it should go in the standard as you
> suggested, and as a first step, it should go in Boost.

Thanks,
-Phil


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk