Created on 2025-06-04.00:00:00 last changed 2 weeks ago
Proposed resolution:
This wording is relative to N5008.
Modify [time.hms.members] as indicated:
constexpr explicit hh_mm_ss(Duration d);-3- Effects: Constructs an object of type `hh_mm_ss` which represents the `Duration d` with precision `precision`.
(3.1) — Initializes `is_neg` with d < Duration::zero(). Let ABS_D represent `-d` if `is_neg` is `true` and `d` otherwise.
(3.2) — Initializes `h` with duration_cast<chrono::hours>(
abs(d)ABS_D).(3.3) — Initializes `m` with duration_cast<chrono::minutes>(
abs(d)ABS_D - hours()).(3.4) — Initializes `s` with duration_cast<chrono::seconds>(
abs(d)ABS_D - hours() - minutes()).(3.5) — If treat_as_floating_point_v<precision::rep> is `true`, initializes `ss` with
abs(d)ABS_D - hours() - minutes() - seconds(). Otherwise, initializes `ss` with duration_cast<precision>(abs(d)ABS_D - hours() - minutes() - seconds()).
[ 2025-06-13; Reflector poll ]
Set status to Tentatively Ready after five votes in favour during reflector poll.
In [time.hms.members], paragraph 3, the current wording for the constructor of `hh_mm_ss` expresses some of its requirements in terms of `abs(d)`, which is assumed to be `chrono::abs(chrono::duration)`. `chrono::abs` is not defined, however, for durations with an unsigned representation. I believe that not being able to create `hh_mm_ss` objects from unsigned durations is unintentional.
Moreover, is_constructible_v<hh_mm_ss<ud>, ud> is required to be true by the standard for any duration, so making it actually work makes a lot of sense.History | |||
---|---|---|---|
Date | User | Action | Args |
2025-06-13 09:08:09 | admin | set | messages: + msg14810 |
2025-06-13 09:08:09 | admin | set | status: new -> ready |
2025-06-07 12:58:37 | admin | set | messages: + msg14783 |
2025-06-04 00:00:00 | admin | create |