C++17 (draft N4659) [basic.compound]/3 says:
Every value of pointer type is one of the following:
a pointer to an object or fu
All C++ standard are an abject mess when it comes to basic runtime concept.
What is an lvalue? It needs to be able to refer to a not yet created object. (Same for pointers.)
When do not created object exist? Do they appear just before they are needed?
To me the best approach would have been to assume all object types exist everywhere in memory where they fit. Many people here told me that was insane and contradictory yet no one ever pointed to a contradiction.
To which of these categories belong pointers to allocated memory outside the lifetime of objects, specifically the values of
a
at// (1)
through// (3)
andb
at// (4)
in the following program?
Pointer values returned from allocation functions (a
at // (1)
and b
at // (4)
) are not currently specified and it is barely possible to classify them according to the taxonomy in [basic.compound]/3, see https://groups.google.com/a/isocpp.org/d/msg/std-discussion/4NQawIytVzM/eMKo2AJ9BwAJ
In my understanding a pointer value becomes invalid when deallocated, not when the life time of an object ends, but if the pointer values are "pointer[s] to an object", to which object do they point?
To the object they pointed to when the object was alive.