Из того, что я понимаю, есть 2 * способы реализовать функцию, которая иногда не возвращает результат (например, человек найден в списке ppl).
* - мы игнорируем исходную версию ptr, пару с флагом bool и исключение, когда ни одна найденная версия.
boost::optional<Person> findPersonInList();
или
std::unique_ptr<Person> findPersonInList();
Так есть ли какие-то причины предпочесть друг другу?