#ifndef BASE_NUMERICS_OSTREAM_OPERATORS_H_
#define BASE_NUMERICS_OSTREAM_OPERATORS_H_
#include <ostream>
#include <type_traits>
namespace base {
namespace numerics_internal {
template <typename T>
requires std::is_arithmetic_v<T>
class ClampedNumeric;
template <typename T>
requires std::is_arithmetic_v<T>
class StrictNumeric;
template <typename T>
std::ostream& operator<<(std::ostream& os, const StrictNumeric<T>& value) {
os << static_cast<T>(value);
return os;
}
template <typename T>
std::ostream& operator<<(std::ostream& os, const ClampedNumeric<T>& value) {
os << static_cast<T>(value);
return os;
}
}
}
#endif