boost::exception_ptr requires that the exception is thrown using enable_current_exception, see www.boost.org/doc/libs/release/libs/exception/doc/enable_current_exception.html. I recommend to throw the exception using BOOST_THROW_EXCEPTION, which internally uses enable_current_exception.