I found an interesting gotcha with std::numeric_limits
returning 0. The answer is to use seconds::max()
or std::numeric_lim
std::chrono::seconds
itself is not a standard arithmetic type, thus std::numeric_limits
is not specialized for it. So you just see some rather useless defaults.
To query the range of the underlying type used to count the ticks (which, under gcc, is the 64 bit long int
), use
std::numeric_limits<seconds::rep>::max();
instead.
std::numeric_limits
is not specialized for std::chrono::seconds
. Default definitions are given for all data members and functions in std::numeric_limits
to avoid compiler errors for unspecialized types. The default version of numeric_limits<T>::max()
simply returns T()
, which is 0
in this case.
You can check if std::numeric_limits
is specialized for a given T
at compile time by checking std::numeric_limits<T>::is_specialized
, which defaults to false
.