This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of New status.
3921. Isstd::chrono::duration<std::int64_t, std::ratio<INT64_MAX - 1, INT64_MAX>>{40}
required to be correctly formatted?
Section: 30.12 [time.format] Status: New Submitter: Jiang An Opened: 2023-04-14 Last modified: 2023-05-24
Priority: 3
View other active issues in [time.format].
View all other issues in [time.format].
View all issues with New status.
Discussion:
Currently none of MSVC STL, libc++, and libstdc++ correctly formats duration<int64_t, ratio<INT64_MAX -1, INT64_MAX>>{40}
(Godbolt link). For MSVC and libstdc++, hh_mm_ss
is used when formatting duration
and thus duration_cast
is also involved. And it's extremely easy for duration_cast
to cause UB when the source type is duration<int64_t, ratio<INT64_MAX -1, INT64_MAX>>
.
hh_mm_ss
is equivalently used when formatting duration. And it seems that the current wording require duration
(whose rep
type is an arithmetic type) to be correctly formatted without UB, even if it is of a weird type or extremely large (e.g. when it is duration<int64_t, ratio<INT64_MAX, 1>>{INT64_MAX}
). So, if it is intended that hh_mm_ss
is used for formatting duration
, perhaps we should explicitly so specify in 30.12 [time.format]. And we may need to fix initialization of hh_mm_ss
to reduce UB whenever suitable.
[2023-05-24; Reflector poll]
Set priority to 3 after reflector poll.
"NAD. A compile-time error is required when ratio arithmetic overflows, 21.5.4 [ratio.arithmetic] p2"
Proposed resolution:
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4