23 General utilities library [utilities]

23.17 Time utilities [time]

23.17.4 Time-related traits [time.traits]

23.17.4.1 treat_­as_­floating_­point [time.traits.is_fp]

template <class Rep> struct treat_as_floating_point : is_floating_point<Rep> { };

В duration использует шаблон по treat_­as_­floating_­point черту , чтобы помочь определить , если duration объект может быть преобразован в другой duration с другим клещом period. Если treat_­as_­floating_­point_­v<Rep> есть true, то среди durations разрешены неявные преобразования . В противном случае неявная конвертируемость зависит от отметки periods в durationстроке s. [ Note: Цель этой черты - указать, ведет ли данный класс как тип с плавающей запятой, и, таким образом, разрешает деление одного значения на другое с приемлемой потерей точности. Если treat_­as_­floating_­point_­v<Rep> есть false, Rep будет рассматриваться, как если бы он вел себя как интегральный тип для целей этих преобразований. ]end note

23.17.4.2 duration_­values [time.traits.duration_values]

template <class Rep> struct duration_values { public: static constexpr Rep zero(); static constexpr Rep min(); static constexpr Rep max(); };

duration Шаблон использует duration_­values признак , чтобы построить специальные значения представления длительностей (Rep). Это сделано потому, что представление может быть типом класса с поведением, которое требует, чтобы какая-то другая реализация возвращала эти специальные значения. В этом случае автор этого типа класса должен специализироваться duration_­values на возврате указанных значений.

static constexpr Rep zero();

Returns: Rep(0). [ Note: Rep(0) указывается вместо, Rep() потому что Rep() может иметь другое значение, например, неинициализированное значение. ] end note

Remarks: Возвращаемое значение должно быть дополнительным идентификатором.

static constexpr Rep min();

Returns: numeric_­limits<Rep>​::​lowest().

Remarks: Возвращаемое значение должно быть меньше или равно zero().

static constexpr Rep max();

Returns: numeric_­limits<Rep>​::​max().

Remarks: Возвращаемое значение должно быть больше чем zero().

23.17.4.3 Specializations of common_­type [time.traits.specializations]

template <class Rep1, class Period1, class Rep2, class Period2> struct common_type<chrono::duration<Rep1, Period1>, chrono::duration<Rep2, Period2>> { using type = chrono::duration<common_type_t<Rep1, Rep2>, see below>; };

period Из duration обозначено этой специализации common_­type должны быть наибольший общий делитель Period1 и Period2. [ Note: Это можно вычислить, образуя отношение наибольшего общего делителя Period1​::​num и Period2​::​num и наименьшего общего кратного Period1​::​den и Period2​::​den. ]end note

[ Имя является синонимом для с самым большим клеща возможно , когда оба аргумента будет конвертировать в него , не требуя операции деления. Представление этого типа предназначено для того, чтобы иметь возможность хранить любое значение, полученное в результате этого преобразования, без ошибки усечения, хотя длительности с плавающей запятой могут иметь ошибки округления. ]Note: typedef type duration period duration end note

template <class Clock, class Duration1, class Duration2> struct common_type<chrono::time_point<Clock, Duration1>, chrono::time_point<Clock, Duration2>> { using type = chrono::time_point<Clock, common_type_t<Duration1, Duration2>>; };

Общий тип двух time_­point типов - это time_­point с теми же часами, что и два типа, и общий тип их двух durations.