A clock is a bundle consisting of a duration, a
time_point, and a function now() to get the current time_point.

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

Table 52 — Clock requirements

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::is_steady | const bool | |

C1::now() | C1::time_point | Returns a time_point object representing the current point in time. |

A type TC meets the TrivialClock requirements if:

- TC satisfies the Clock requirements,
- the types TC::rep, TC::duration, and TC::time_point satisfy the EqualityComparable (Table 20), LessThanComparable (Table 21), DefaultConstructible (Table 22), CopyConstructible (Table 24), CopyAssignable (Table 26), and Destructible (Table 27) requirements and the requirements of numeric types ([numeric.requirements]).
- the function TC::now() does not throw exceptions, and