No, it's just Herb writing it in a perhaps needlessly Difficult Way™.
Consider this short quote:
“people by convention use references for not-null parameters in
particular and so in modern C++ code the presence of a T*parameter often
(not always) implies nullability by that convention.”
I think that's it in a nutshell, for what Herb is focusing on here.
A reference like `T&` is the way to represent a non-null reference.
`T& o` is pretty specific: `o` is a single object of type `T`.
For a raw pointer `T* p` there are many possibilities even in valid code:
• `p` is null.
• `p` is non-null but doesn't point to an object (e.g., beyond an array).
• `p` is invalid, e.g. an indeterminate or dangling pointer.
• `p` points to an array (so, e.g., use `delete[]` for deletion, and in
particular don't upcast or downcast and use the result for indexing).
• `p` points to a single object of type `T`, like `o`.
I find it curious that Herb only focuses on the first point above, the
nullpointer possibility (at least in what I read of it), but maybe he
reasoned that was quite enough for a blog posting.
> The strength of C and C++ are null pointers. The weakness of C and C++
> are null pointers.
This is so also in Java, C#, Python, ... :)
In particular, for Java I recall problems with serialization for RPC of
structures that could contain null-references.
And then there's the database null versus empty string versus
nullpointer versus the literal `0` versus `{}` versus whatever.
Cheers!,
- Alf