Вы не должны использовать исключение здесь. Это, очевидно, не исключительный случай, если вам нужно ожидать его везде, где вы используете эту функцию!
Лучшим решением было бы заставить функцию возвращать экземпляр чего-то подобного. В отладочных сборках (при условии, что разработчики используют пути кода, которые они только что написали), они получат подтверждение, если забудут проверить, успешно ли выполнена операция.
class SearchResult
{
private:
ResultType result_;
bool succeeded_;
bool succeessChecked_;
public:
SearchResult(Result& result, bool succeeded)
: result_(result)
, succeeded_(succeeded)
, successChecked_(false)
{
}
~SearchResult()
{
ASSERT(successChecked_);
}
ResultType& Result() { return result_; }
bool Succeeded() { successChecked_ = true; return succeeded_; }
}