[time.point] (original) (raw)

30 Time library [time]

30.6 Class template time_point [time.point]

30.6.1 General [time.point.general]

namespace std::chrono { 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_; public: constexpr time_point(); constexpr explicit time_point(const duration& d); template<class Duration2> constexpr time_point(const time_point<clock, Duration2>& t);constexpr duration time_since_epoch() const;constexpr time_point& operator++();constexpr time_point operator++(int);constexpr time_point& operator--();constexpr time_point operator--(int);constexpr time_point& operator+=(const duration& d);constexpr time_point& operator-=(const duration& d);static constexpr time_point min() noexcept;static constexpr time_point max() noexcept;};}

If Duration is not a specialization of duration, the program is ill-formed.

30.6.2 Constructors [time.point.cons]

Effects: Initializes d_ with duration​::​zero().

Such a time_point object represents the epoch.

constexpr explicit time_point(const duration& d);

Effects: Initializes d_ with d.

Such a time_point object represents the epoch + d.

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

Constraints: is_convertible_v<Duration2, duration> is true.

Effects: Initializes d_ with t.time_since_epoch().

30.6.4 Arithmetic [time.point.arithmetic]

constexpr time_point& operator++();

Effects: Equivalent to: ++d_.

constexpr time_point operator++(int);

Effects: Equivalent to: return time_point{d_++};

constexpr time_point& operator--();

Effects: Equivalent to: --d_.

constexpr time_point operator--(int);

Effects: Equivalent to: return time_point{d_--};

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

Effects: Equivalent to: d_ += d.

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

Effects: Equivalent to: d_ -= d.

30.6.5 Special values [time.point.special]

static constexpr time_point min() noexcept;

Returns: time_point(duration​::​min()).

static constexpr time_point max() noexcept;

Returns: time_point(duration​::​max()).

30.6.6 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), where CT is the type of the return value.

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);

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), where CT is the type of the return value.

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().

30.6.7 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.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);

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

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

template<class Clock, class Duration1,[three_way_comparable_with](cmp.concept#concept:three%5Fway%5Fcomparable%5Fwith "17.12.4 Concept three_­way_­comparable [cmp.concept]")<Duration1> Duration2> constexpr auto operator<=>(const time_point<Clock, Duration1>& lhs,const time_point<Clock, Duration2>& rhs);

Returns: lhs.time_since_epoch() <=> rhs.time_since_epoch().

30.6.8 Conversions [time.point.cast]

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

Constraints: ToDuration is a specialization of 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);

Constraints: ToDuration is a specialization of 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);

Constraints: ToDuration is a specialization of 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);

Constraints: ToDuration is a specialization of duration, andtreat_as_floating_point_v<typename ToDuration​::​rep> is false.

Returns: time_point<Clock, ToDuration>(round<ToDuration>(tp.time_since_epoch())).