Vous ne devriez pas utiliser d'exception ici. Ce n'est évidemment pas un cas exceptionnel si vous devez vous y attendre partout où vous utilisez cette fonction !
Une meilleure solution serait de faire en sorte que la fonction renvoie une instance de quelque chose comme ça. Dans les versions de débogage (en supposant que les développeurs utilisent les chemins de code qu'ils viennent d'écrire), ils obtiendront une assertion s'ils oublient de vérifier si l'opération a réussi ou non.
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_; }
}