A clock is a bundle consisting of a duration, a time_point, and a function now() to get the current time_point. The origin of the clock's time_point is referred to as the clock's epoch. A clock shall meet the requirements in Table [tab:time.clock].
In Table [tab:time.clock] C1 and C2 denote clock types. t1 and t2 are values returned by C1::now() where the call returning t1 happens before ([intro.multithread]) the call returning t2 and both of these calls occur before C1::time_point::max(). [ Note: this means C1 did not wrap around between t1 and t2. — end note ]
|Expression||Return type||Operational semantics|
|C1::rep||An arithmetic type or a class emulating an arithmetic type||The representation type of C1::duration.|
|C1::period||a specialization of ratio||The tick period of the clock in seconds.|
|C1::duration||chrono::duration<C1::rep, C1::period>||The duration type of the clock.|
|C1::time_point||chrono::time_point<C1> or chrono::time_point<C2, C1::duration>||The time_point type of the clock. C1 and C2 shall refer to the same epoch.|
|C1::is_steady||const bool||true if t1 <= t2 is always true and the time between clock ticks is constant, otherwise false.|
|C1::now()||C1::time_point||Returns a time_point object representing the current point in time.|
[ Note: The relative difference in durations between those reported by a given clock and the SI definition is a measure of the quality of implementation. — end note ]
A type TC meets the TrivialClock requirements if:
TC satisfies the Clock requirements ([time.clock.req]),
the types TC::rep, TC::duration, and TC::time_point satisfy the requirements of EqualityComparable (Table [equalitycomparable]), LessThanComparable (Table [lessthancomparable]), DefaultConstructible (Table [defaultconstructible]), CopyConstructible (Table [copyconstructible]), CopyAssignable (Table [copyassignable]), Destructible (Table [destructible]), and the requirements of numeric types ([numeric.requirements]). [ Note: this means, in particular, that operations on these types will not throw exceptions. — end note ]
lvalues of the types TC::rep, TC::duration, and TC::time_point are swappable ([swappable.requirements]),
the function TC::now() does not throw exceptions, and
the type TC::time_point::clock meets the TrivialClock requirements, recursively.