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;
};
}
Clock shall either
meet the
Cpp17Clock requirements (
[time.clock.req])
or be the type
local_t. If
Duration is not an instance of
duration,
the program is ill-formed
.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(). constexpr duration time_since_epoch() const;
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. static constexpr time_point min() noexcept;
Returns:
time_point(duration::min()). static constexpr time_point max() noexcept;
Returns:
time_point(duration::max()). 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(). 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<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(). 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, and
treat_as_floating_point_v<typename ToDuration::rep> is
false. Returns:
time_point<Clock, ToDuration>(round<ToDuration>(tp.time_since_epoch())).