¿Existe un operador de navegación seguro para C ++?

En Modern C ++, ¿hay alguna manera de hacer una navegación segura?

Por ejemplo,en lugar de hacer...

if (p && p->q && p->q->r)
    p->q->r->DoSomething();

... tener una sintaxis sucinta mediante el uso de algún tipo de puntero inteligente de cortocircuito, o algún otro tipo de sobrecarga de operador que aproveche la sintaxis, o algo en la Biblioteca C ++ estándar, o en Boost.

p?->q?->r?->DoSomething(); // C++ pseudo-code.

El contexto es C ++ 17 en particular.

Respuestas a la pregunta(2)

Su respuesta a la pregunta