Confession: for long time, I've been thinking that C++ reference is a fancy and a completely stupid way of writing a pointer. A way useful only for two things. One is operator overloading when an lvalue is needed - i.e. where "&a += c" semantics is not an acceptable way of writing "a+=c". The second thing is to make it easier to cut-and-paste code across functions, so that a lazy programmer wouldn't have hard time adding all those stars. The truth is different: reference is a significantly different language tool than a pointer. A reference can never be invalid, at least unless forced to be so with a far less-trivial construct than what is needed to make a pointer invalid.
In the modern era of C++ references and boost::shared_ptr, pointers can really be confined to something that is "explicitly nullable" and where you need this nullability.
VZ: "But of course. Every * and -> is an access violation waiting to happen"