Pass by reference was a mistake. Doesn’t need to exist. Obscures what’s actually happening at the call site. Overloads the minds of programmers with an unnecessary third option, which causes bugs like this. Some other non-null indicating syntax for pass by pointer (visible at call site) would’ve made more sense.
I feel exactly like the author. I get less comfortable with C++ year after year, despite writing it all day. I feel like a race car driver who was once confident but has now gotten into too many big crashes.