Title
Disallow chrono::duration<const T, P>
Status
ready
Section
[time.duration.general]
Submitter
Jonathan Wakely

Created on 2025-11-26.00:00:00 last changed 7 days ago

Messages

Date: 2026-01-16.15:01:21

Proposed resolution:

This wording is relative to N5014.

  1. Modify [time.duration.general] as indicated:

    -2- `Rep` shall be an arithmetic type or a class emulating an arithmetic type. If a specialization of `duration` is instantiated with a cv-qualified type or a specialization of `duration` type as the argument for the template parameter `Rep`, the program is ill-formed.

    -3- If `Period` is not a specialization of `ratio`, the program is ill-formed. If `Period::num` is not positive, the program is ill-formed.

    -4- Members of `duration` do not throw exceptions other than those thrown by the indicated operations on their representations.

Date: 2026-01-15.00:00:00

[ 2026-01-16; Reflector poll. ]

Set status to Tentatively Ready after ten votes in favour during reflector poll.

This loses support for duration<volatile T, P> but that seems OK.

Date: 2025-11-26.00:00:00

Using a const type as the `rep` for a `chrono::duration` causes various problems but there seems to be no rule preventing it.

The non-const member operators that modify a `duration` don't work if the `rep` type is const, e.g. duration<const int>::operator++() is typically ill-formed (unless the implementation chooses to store remove_cv_t<rep> as the data member). hash<duration<const int>> uses hash<const int> which is not enabled, so you can't hash a `duration` with a const rep. Generic code that wants to perform arithmetic with the `rep` type would need to remember to consistently use remove_cv_t<rep> to work correctly with const types.

We should just disallow const `rep` types. If you want a non-modifiable duration, use const duration<R,P> not duration<const R, P>

History
Date User Action Args
2026-01-16 15:01:21adminsetmessages: + msg15851
2026-01-16 15:01:21adminsetstatus: new -> ready
2025-11-26 09:37:33adminsetmessages: + msg15760
2025-11-26 00:00:00admincreate