On 18 October 2013 01:46, Christopher Jefferson <chris@bubblescope.net> wrote:

Here is a suggestion. How about we make the result of comparing pointers from different allocations into implementation-defined behaviour?

While it gets it out of this group, I don't think that addresses the real problem.

Of course, if you think that:

bool isInArray = std::begin(a) <= p && p < std::end(a);

is an unreasonable piece of code, there are no problems. :-)  If you think it is reasonable, I don't see how making it implementation-defined behavior stops the optimizer from rewriting that as:

bool isInArray = static_cast<bool>(p);

(possibly even 'isInArray = true;', but I'd have to study the rules for nullptrs to see if this is allowed)

And developers can't count on implementation-defined behavior in portable code.  Look at all the pain people go through because C didn't nail down (for valid reasons at the time) the signness of char.  And the implementation-defined behavior of the representation of char only has two possible outcomes...
--
 Nevin ":-)" Liber  <mailto:nevin@eviloverlord.com(847) 691-1404