The way we do it in modern languages with things like std::optional and even that is not the best example.
You basically end up with null/0 don’t you?
Seeking performance we've been very prone to avoid abstractions and over and over again have shown why we need the safe abstractions.
So yes, it's nulls underneath, but the developer never has to think about them.