The section §24.1/5 from the C++ Standard (2003) reads,
Just as a regular pointer to an array guarantees that there is a pointer value pointing pa
What is singular value and nonsingular value? How are they defined? And where?
Let us use the simplest incarnation of an Iterator: the pointer.
For a pointer:
I would say that the NULL pointer is a singular value, though not the only one, since it represents the absence of value.
What is the equivalence for regular iterators ?
std::vector, the default constructor of most iterators (those linked to a container) create a singular value. Since it's not tied to a container, any form of navigation (increment, decrement, ...) is meaningless.
How and why dereferenceable values are always nonsingular ?
Singular values, by definition, represent the absence of a real value. They appear in many languages: Python's None, C#'s null, C's NULL, C++'s std::nullptr. The catch is that in C or C++, they may also be simple garbage... (whatever was there in memory before)
Is a default constructed iterator a singular value ?
Not necessarily, I guess. It is not required by the standard, and one could imagine the use of a sentinel object.