
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