diff --git a/src/language/utils/OStream.hpp b/src/language/utils/OStream.hpp
index d9410e25e35d2a3e9d5ac147911f6464d3b71eb7..bef02277ef8e07be09cc5731b33c6f5c3363e37d 100644
--- a/src/language/utils/OStream.hpp
+++ b/src/language/utils/OStream.hpp
@@ -23,6 +23,17 @@ class OStream
     return os;
   }
 
+  template <typename DataT>
+  friend std::shared_ptr<const OStream>
+  operator<<(const std::shared_ptr<const OStream>& os, const std::shared_ptr<const DataT>& t)
+  {
+    Assert(os.use_count() > 0, "non allocated stream");
+    if (os->m_ostream != nullptr) {
+      *os->m_ostream << *t;
+    }
+    return os;
+  }
+
   OStream(std::ostream& os) : m_ostream(&os) {}
   OStream() = default;