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