"It's not a question of happiness, it's
a requirement. Consider the alternative” Doug Horton

As it was indicated previously boost::optional
is the actual type returned by the boost::convert() main interface:

boost::optional<TypeOut>boost::convert(TypeInconst&,Converterconst&);

The signature is functionally-complete, routinely elided
during compilation and is the most efficient in deploying the underlying converter.
That said, the following alternative (and arguably more traditional) interface
might be potentially more suitable for certain deployment scenarios (or due
to personal preferences):

It still provides unambigous behavior and readability, full support for various
program flows and various degrees of conversion-failure detection and processing.
It can be deployed in a similar fashion as follows:

structfallback_func{intoperator()()const{log("Failed to convert");return42;}};