23 General utilities library [utilities]

23.17 Time utilities [time]

23.17.6 Class template time_­point [time.point]

template <class Clock, class Duration = typename Clock::duration>
class time_point {
public:
  using clock    = Clock;
  using duration = Duration;
  using rep      = typename duration::rep;
  using period   = typename duration::period;
private:
  duration d_;  // exposition only

public:
  // [time.point.cons], construct
  constexpr time_point();  // has value epoch
  constexpr explicit time_point(const duration& d);  // same as time_­point() + d
  template <class Duration2>
    constexpr time_point(const time_point<clock, Duration2>& t);

  // [time.point.observer], observer
  constexpr duration time_since_epoch() const;

  // [time.point.arithmetic], arithmetic
  constexpr time_point& operator+=(const duration& d);
  constexpr time_point& operator-=(const duration& d);

  // [time.point.special], special values
  static constexpr time_point min();
  static constexpr time_point max();
};

Clock должен соответствоватьClock requirements.

ЕслиDuration не является экземпляромduration, программа имеет неверный формат .

23.17.6.1 time_­point constructors [time.point.cons]

constexpr time_point();

Effects: Создает объект типаtime_­point, инициализируясь d_­ с помощьюduration​::​zero(). Такойtime_­point объект представляет эпоху.

constexpr explicit time_point(const duration& d);

Effects: Создает объект типаtime_­point, инициализируясь d_­ с помощьюd. Такойtime_­point объект представляет эпоху + d.

template <class Duration2> constexpr time_point(const time_point<clock, Duration2>& t);

Remarks: Этот конструктор не должен участвовать в разрешении перегрузки, если он неDuration2 может быть неявно преобразован вduration.

Effects: Создает объект типаtime_­point, инициализируясь d_­ с помощьюt.time_­since_­epoch().

23.17.6.2 time_­point observer [time.point.observer]

constexpr duration time_since_epoch() const;

Returns:d_­.

23.17.6.3 time_­point arithmetic [time.point.arithmetic]

constexpr time_point& operator+=(const duration& d);

Effects: Как будто по:d_­ += d;

Returns:*this.

constexpr time_point& operator-=(const duration& d);

Effects: Как будто по:d_­ -= d;

Returns:*this.

23.17.6.4 time_­point special values [time.point.special]

static constexpr time_point min();

Returns:time_­point(duration​::​min()).

static constexpr time_point max();

Returns:time_­point(duration​::​max()).

23.17.6.5 time_­point non-member arithmetic [time.point.nonmember]

template <class Clock, class Duration1, class Rep2, class Period2> constexpr time_point<Clock, common_type_t<Duration1, duration<Rep2, Period2>>> operator+(const time_point<Clock, Duration1>& lhs, const duration<Rep2, Period2>& rhs);

Returns:CT(lhs.time_­since_­epoch() + rhs), гдеCT - тип возвращаемого значения.

template <class Rep1, class Period1, class Clock, class Duration2> constexpr time_point<Clock, common_type_t<duration<Rep1, Period1>, Duration2>> operator+(const duration<Rep1, Period1>& lhs, const time_point<Clock, Duration2>& rhs);

Returns:rhs + lhs.

template <class Clock, class Duration1, class Rep2, class Period2> constexpr time_point<Clock, common_type_t<Duration1, duration<Rep2, Period2>>> operator-(const time_point<Clock, Duration1>& lhs, const duration<Rep2, Period2>& rhs);

Returns:CT(lhs.time_­since_­epoch() - rhs), гдеCT - тип возвращаемого значения.

template <class Clock, class Duration1, class Duration2> constexpr common_type_t<Duration1, Duration2> operator-(const time_point<Clock, Duration1>& lhs, const time_point<Clock, Duration2>& rhs);

Returns:lhs.time_­since_­epoch() - rhs.time_­since_­epoch().

23.17.6.6 time_­point comparisons [time.point.comparisons]

template <class Clock, class Duration1, class Duration2> constexpr bool operator==(const time_point<Clock, Duration1>& lhs, const time_point<Clock, Duration2>& rhs);

Returns:lhs.time_­since_­epoch() == rhs.time_­since_­epoch().

template <class Clock, class Duration1, class Duration2> constexpr bool operator!=(const time_point<Clock, Duration1>& lhs, const time_point<Clock, Duration2>& rhs);

Returns:!(lhs == rhs).

template <class Clock, class Duration1, class Duration2> constexpr bool operator<(const time_point<Clock, Duration1>& lhs, const time_point<Clock, Duration2>& rhs);

Returns:lhs.time_­since_­epoch() < rhs.time_­since_­epoch().

template <class Clock, class Duration1, class Duration2> constexpr bool operator<=(const time_point<Clock, Duration1>& lhs, const time_point<Clock, Duration2>& rhs);

Returns:!(rhs < lhs).

template <class Clock, class Duration1, class Duration2> constexpr bool operator>(const time_point<Clock, Duration1>& lhs, const time_point<Clock, Duration2>& rhs);

Returns:rhs < lhs.

template <class Clock, class Duration1, class Duration2> constexpr bool operator>=(const time_point<Clock, Duration1>& lhs, const time_point<Clock, Duration2>& rhs);

Returns:!(lhs < rhs).

23.17.6.7 time_­point_­cast [time.point.cast]

template <class ToDuration, class Clock, class Duration> constexpr time_point<Clock, ToDuration> time_point_cast(const time_point<Clock, Duration>& t);

Remarks: Эта функция не должна участвовать в разрешении перегрузки, еслиToDuration она не является специализациейduration.

Returns:

time_point<Clock, ToDuration>(duration_cast<ToDuration>(t.time_since_epoch()))

template <class ToDuration, class Clock, class Duration> constexpr time_point<Clock, ToDuration> floor(const time_point<Clock, Duration>& tp);

Remarks: Эта функция не должна участвовать в разрешении перегрузки, еслиToDuration она не является специализациейduration.

Returns:time_­point<Clock, ToDuration>(floor<ToDuration>(tp.time_­since_­epoch())).

template <class ToDuration, class Clock, class Duration> constexpr time_point<Clock, ToDuration> ceil(const time_point<Clock, Duration>& tp);

Remarks: Эта функция не должна участвовать в разрешении перегрузки, еслиToDuration она не является специализациейduration.

Returns:time_­point<Clock, ToDuration>(ceil<ToDuration>(tp.time_­since_­epoch())).

template <class ToDuration, class Clock, class Duration> constexpr time_point<Clock, ToDuration> round(const time_point<Clock, Duration>& tp);

Remarks: Эта функция не должна участвовать в разрешении перегрузки, еслиToDuration она не является специализациейdurationи не treat_­as_­floating_­point_­v<typename ToDuration​::​rep> являетсяfalse.

Returns:time_­point<Clock, ToDuration>(round<ToDuration>(tp.time_­since_­epoch())).