Я думаю тебе уж точно не нужно объяснять разницу между ссылкой и указателем
Мне — нужно. Ибо у меня в коде нет value, у меня всегда есть либо некоторый контейнер, вроде std::optional, либо умный указатель. Проверка для всех идентичная if (value) { ... } else { std::terminate }