"Richard Guenther" <[EMAIL PROTECTED]> writes:
[...]
| > It's worse than that:
| >
| > char *pool;
| > void set_pool(char *p) { pool = p; }
| > void *operator new(size_t s) { // return stuff from pool. }
| >
| > bool f() {
| > char *p = new char[1024];
| > set_pool (p);
| > char *i = new char;
| > return (p == i);
| > }
| >
| > In other words, pointers from any part of the program can potentially be
| > "laundered" through set_pool and return via the new operator. I don't
| > see any way to make this fully safe, in general, without the limitation
| > I imposed: the no-aliasing guarantee only applies to the values returned
| > from the function called.
|
| But in this case an access to *i through *p is invalid. [I suppose both
| new calls are actually different implementations here] Each new
| call starts lifetime of a new object, the previous object lifetime is
| terminated. Even comparing both pointers here for this reason
| would lead to undefined behavior.
I don't follow your reasoning here. 'char*' and 'void*' are special.
-- Gaby