What is the C++11 equivalent to boost::date_time::not_a_date_time?

前端 未结 2 1277
独厮守ぢ
独厮守ぢ 2021-01-06 18:03

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

2条回答
  •  旧时难觅i
    2021-01-06 18:17

    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::max() return 0?).

    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.

提交回复
热议问题