23 General utilities library [utilities]

23.17 Time utilities [time]

23.17.5 Class template duration [time.duration]

23.17.5.1 duration constructors [time.duration.cons]

template <class Rep2> constexpr explicit duration(const Rep2& r);

Remarks: Этот конструктор не должен участвовать в разрешении перегрузки, если он не Rep2 может быть неявно преобразован в rep и

  • treat_­as_­floating_­point_­v<rep> есть true или

  • treat_­as_­floating_­point_­v<Rep2> есть false.

[Example:

duration<int, milli> d(3);          // OK
duration<int, milli> d(3.5);        // error

end example]

Effects: Создает объект типа duration.

Postconditions: count() == static_­cast<rep>(r).

template <class Rep2, class Period2> constexpr duration(const duration<Rep2, Period2>& d);

Remarks: Этот конструктор не должен участвовать в разрешении перегрузки, если при преобразовании не индуцируется переполнение и treat_­as_­floating_­point_­v<rep> есть true или оба они ratio_­divide<Period2, period>​::​den есть 1 и treat_­as_­floating_­point_­v<Rep2> есть false. [ Note: Это требование предотвращает неявную ошибку усечения при преобразовании между целочисленными duration типами. Такая конструкция может легко привести к путанице в отношении стоимости duration. ] [ end noteExample:

duration<int, milli> ms(3);
duration<int, micro> us = ms;       // OK
duration<int, milli> ms2 = us;      // error

end example]

Effects: Создает объект типа duration, построенный rep_­ из
duration_­cast<duration>(d).count().