I\'m modifying an old project, and at the same time I\'m updating several things to bring it up to C++11.
I\'d like to replace various uses of boost::date_time with
boost::date_time
uses integer time representations internally, and defines the special values inside boost/date_time/int_adapter.hpp:
static const int_adapter pos_infinity()
{
return (::std::numeric_limits::max)();
}
static const int_adapter neg_infinity()
{
return (::std::numeric_limits::min)();
}
static const int_adapter not_a_number()
{
return (::std::numeric_limits::max)()-1;
}
static int_adapter max BOOST_PREVENT_MACRO_SUBSTITUTION ()
{
return (::std::numeric_limits::max)()-2;
}
static int_adapter min BOOST_PREVENT_MACRO_SUBSTITUTION ()
{
return (::std::numeric_limits::min)()+1;
}
Essentially, it reserves certain integer values to have special meanings.
However, as others have pointed out, std::chrono does not offer these special values (there are only min and max functions); and std::numeric_limits
is also not specialized (see Why does std::numeric_limits
Ben Voigt's answer presents a possible workaround, but be aware that since the std::chrono
classes do not specify such semantics, handing a NaN timestamp or duration to any function you did not write yourself is likely going to trigger undefined behaviour.