Re: STL map question : directed to stl map expert(s)....
* Craig Scott:
On Sep 20, 5:21 pm, James Dennett <jdenn...@acm.org> wrote:
Here it falls down; an invalidated pointer not only does not
point to anything valid, it's also not CopyConstructible or
Assignable (in that any attempt to read its value gives UB).
I think others have responded sufficiently to this thread
(particularly Maciej's counter-example), but I'm intrigued by the
statement that an invalidated pointer is not CopyConstructible nor
Assignable. According to the standard, neither CopyConstructible
(20.1.3) nor Assignable (23.1/4) require a pointer to be
dereferencable. Remember that it is what the pointer *points to* that
no longer exists, but the pointer itself still exists and does not
magically change its value just because what it used to point to no
longer exists. A pointer is a POD type that can be copied and assigned
at will (whether the value being copied/assigned has meaning is a
different issue).
From a practical point of view, some processors may have address
registers that trap on loads of certain invalid pointer values. This
has been discussed in [clc++m] before. E.g., first hit in Google, <url:
http://groups.google.com/group/comp.lang.c++.moderated/browse_thread/thread/
bfa690ee78a1ed3b/aace2398221b7a13>.
From a formal point of view, "using" an invalid pointer is Undefined
Behavior, where IIRC "using" is defined as appearing in a "potentially
evaluated" context. Checking... Uh, darned hard to find, I had to
cheat by looking in the thread mentioned above, but anyway: ?3.7.3.2/4
tells us that if an invalid pointer value is used the effect is
Undefined Behavior, with a non-normative note explaining about traps
("system-generated runtime fault"); ?3.2/2 tells us that "used" means
appearing in a potentially evaluated expression, and further that
"potentially evaluated" means the expression is neither an argument to
sizeof nor polymorphic class type lvalue argument to typeid.
The upshot is that a pointer can not be copied and assigned at will;
however, as far as I know the standard fails to define "invalid"...
Cheers, & hth.,
- Alf
--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]