A "good Boost citizen" library should throw using boost::throw_exception, in order to support configurations where exception handling is disabled.

The boost::throw_exception function requires that the type of the passed exception derives publicly from std::exception (as of version 1.37.0 or thereabouts boost::throw_exception will issue a compile error if that requirement is not met.) In addition and by default, exceptions emitted using boost::throw_exception derive from boost::exception.

However, there is no requirement for Boost libraries to throw exceptions through boost:throw_exception or to derive from std::exception.