diff --git a/src/utils/NaNHelper.hpp b/src/utils/NaNHelper.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..d77d1d9f177b2d4aa9f3ecc0a93b457e367f66e4
--- /dev/null
+++ b/src/utils/NaNHelper.hpp
@@ -0,0 +1,38 @@
+#ifndef NAN_HELPER_HPP
+#define NAN_HELPER_HPP
+
+#include <cmath>
+#include <iostream>
+#include <type_traits>
+
+template <typename T>
+class NaNHelper
+{
+ private:
+  const T& m_t;
+
+ public:
+  friend std::ostream&
+  operator<<(std::ostream& os, const NaNHelper<T>& helper)
+  {
+    if constexpr (std::is_arithmetic_v<T>) {
+      if (std::isnan(helper.m_t)) {
+        os << "nan";
+      } else {
+        os << helper.m_t;
+      }
+    } else {
+      os << helper.m_t;
+    }
+    return os;
+  }
+  NaNHelper(const T& t) : m_t{t} {}
+
+  NaNHelper(NaNHelper&&)      = delete;
+  NaNHelper(const NaNHelper&) = delete;
+
+  NaNHelper()  = delete;
+  ~NaNHelper() = default;
+};
+
+#endif   // NAN_HELPER_HPP