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

Index: boost/smart_ptr/intrusive_ptr.hpp
--- boost/smart_ptr/intrusive_ptr.hpp.orig
+++ boost/smart_ptr/intrusive_ptr.hpp
@@ -285,7 +285,7 @@ template<class T, class U> intrusive_ptr<T> dynamic_po
 
 // operator<<
 
-template<class Y> std::ostream & operator<< (std::ostream & os, intrusive_ptr<Y> const & p)
+template<class E, class T, class Y> std::basic_ostream<E, T> & operator<< (std::basic_ostream<E, T> & os, intrusive_ptr<Y> const & p)
 {
     os << p.get();
     return os;
