Fix operator<< for shared_ptr and intrusive_ptr
https://github.com/boostorg/smart_ptr/commit/e7433ba54596da97cb7859455cd37ca140305a9c

Index: boost/smart_ptr/shared_ptr.hpp
--- boost/smart_ptr/shared_ptr.hpp.orig
+++ boost/smart_ptr/shared_ptr.hpp
@@ -775,7 +775,7 @@ template<class T> inline typename shared_ptr<T>::eleme
 
 // operator<<
 
-template<class Y> std::ostream & operator<< (std::ostream & os, shared_ptr<Y> const & p)
+template<class E, class T, class Y> std::basic_ostream<E, T> & operator<< (std::basic_ostream<E, T> & os, shared_ptr<Y> const & p)
 {
     os << p.get();
     return os;
