Handle changes to boost::optional in newly released 1.56.

To improve compatibility with the proposed std::optional a number of changes were made,
one of which is the removal of the implicit conversion to bool.  As a result, returning
boost::optional as a bool value now fails.  Either explicit conversion to bool
or the use of operator! will work;  I chose the latter.
I get the need for the conversion, but `!!` looks like an accident, and I'll predict it lasts less than a month before someone either removes both `!`, thinking there was a mistake, or worse, removes one `!`, and introduces a bug.

A comment explaining the reasoning behind `!!` would be good, but IMHO, an explicit cast would be better.