duration
constructor from representation shouldn't be effectively non-throwingSection: 30.5 [time.duration] Status: C++23 Submitter: Johel Ernesto Guerrero Peña Opened: 2018-06-22 Last modified: 2023-11-22
Priority: 3
View all other issues in [time.duration].
View all issues with C++23 status.
Discussion:
[time.duration]/4 states:
Members of duration shall not throw exceptions other than those thrown by the indicated operations on their representations.
Where representation is defined in the non-normative, brief description at [time.duration]/1:
[…] A duration has a representation which holds a count of ticks and a tick period. […]
[time.duration.cons]/2 doesn't indicate the operation undergone by its representation, merely stating a postcondition in [time.duration.cons]/3:
Effects: Constructs an object of type
Postconditions:duration
.count() == static_cast<rep>(r)
.
I suggest this reformulation that follows the format of [time.duration.cons]/5.
Effects: Constructs an object of type duration, constructing
rep_
fromr
.
Now it is clear why the constructor would throw.
Previous resolution [SUPERSEDED]:
This wording is relative to N4750.
Change 30.5.2 [time.duration.cons] as indicated:
template<class Rep2> constexpr explicit duration(const Rep2& r);-1- Remarks: This constructor shall not participate in overload resolution unless […]
-2- Effects: Constructs an object of typeduration
, constructingrep_
fromr
. -3- Postconditions:count() == static_cast<rep>(r)
.
[2018-06-27 after reflector discussion]
Priority set to 3. Improved wording as result of that discussion.
Previous resolution [SUPERSEDED]:
This wording is relative to N4750.
Change 30.5.2 [time.duration.cons] as indicated:
template<class Rep2> constexpr explicit duration(const Rep2& r);-1- Remarks: This constructor shall not participate in overload resolution unless […]
-2- Effects:Constructs an object of typeInitializesduration
rep_
withr
.-3- Postconditions:count() == static_cast<rep>(r)
.
[2020-05-02; Daniel resyncs wording with recent working draft]
[2021-09-20; Reflector poll]
Set status to Tentatively Ready after seven votes in favour during reflector poll.
[2021-10-14 Approved at October 2021 virtual plenary. Status changed: Voting → WP.]
Proposed resolution:
This wording is relative to N4861.
Change 30.5.2 [time.duration.cons] as indicated:
template<class Rep2> constexpr explicit duration(const Rep2& r);-1- Constraints:
is_convertible_v<const Rep2&, rep>
istrue
and
(1.1) —
treat_as_floating_point_v<rep>
istrue
or(1.2) —
treat_as_floating_point_v<Rep2>
isfalse
.[Example: […] end example]
-?- Effects: Initializesrep_
withr
.-2- Postconditions:count() == static_cast<rep>(r)
.