Fair enough, that example relies on pointer dereferencing. As you say references must refer to a valid object, and for the most part this is enforced by requiring them to be initialized.
While it's circuitous to have a never valid reference, it isn't particularly unlikely:
struct A {
int& ir1;
int& ir2;
A(int& i) : ir1(ir2), ir2(i) {}
};
With enough warnings enabled g++ warns about this, but I don't think it's the "don't compile this" kind of illegal but rather the "certain failure at runtime" kind, like any uninitialized variable. Likewise the simple:
int& f() {
int i;
return i;
}
Undefined, but no more forbidden than taking the address and returning it.
Your point that it causes "undefined behaviour" is exactly my point, were references properly constrained by the language this would be outright illegal, not merely undefined. Of course I haven't read the standard or Stroustrup closely enough to be able to cite anything so fire at will.