#include <boost/exception/info.hpp> 
namespace
boost
    {
    template <class E, class Tag, class T>
    E const & operator<<( E const & x, error_info<Tag,T> const & v );
    }
E must be boost::exception, or a type that derives (indirectly) from boost::exception.
A copy of v is stored into x. If x already contains data of type error_info<Tag,T>, that data is overwritten. Basic exception safety guarantee.
x.
std::bad_alloc, or any exception emitted by the T copy constructor.