No debe usar una excepción aquí. Obviamente, este no es un caso excepcional si necesita estar esperándolo en cualquier lugar donde use esta función.
Una mejor solución sería obtener la función para devolver una instancia de algo como esto. En las compilaciones de depuración (suponiendo que los desarrolladores sigan las rutas de código que acaban de escribir), obtendrán una afirmación si olvidan comprobar si la operación tuvo éxito o no.
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_; }
}
El consenso sobre el enfoque de Procrustean de Java a las especificaciones de excepción es que está muy roto. –