Although a lot of people treat exceptions in C++ really as 'something exceptional happened', I find them incredibly handy to do basic error-checking / validation as well, mostly at application-level (as in not in the core of the library)
Example, I'd rather write
try
{
MethodA();
MethodB();
//.. a whole lot of other methods crucial to succeed for app initialization
}
catch( const SomeException& e )
{
//show user the critical error contained in e
return 1;
}
then writing
if( !MethodA() )
{
//retrieve and show error
return 1;
}
if( !MethodB() || !MethodC() )
{
//retrieve and show error
return 1;
}
//etc
This tends to lead to less code, also within the methods themselves.