User:T. Canens/date issues
From cppreference.com
- operator<<(duration):
- Wording is unclear that we may need to copy the result of to_w?string if there's a traits mismatch
- to_stream(duration):
- Unclear how exactly formatting is to be done for a pure duration - e.g. "12-hour"/"24-hour"?
- file_clock's to/from functions are specified with vigorous handwaving
- clock_time_conversion
- We should say that user specializations need to be DefaultConstructible; otherwise clock_cast can't use them.
- Can specializations be an empty class as well?
- "takes a parameter of type time_point<SourceClock, Duration>" - mean "argument"
- Calendar classes
- operator<< specification is all kinds of unclear in terms of interaction with stream formatting flags.
- e.g., operator<<(day): if inserting format(...) as specified, would apply padding etc. But reference impl does nothing of that sort and writes into the stream directly.
- These need to be respecified to avoid depending on format per the new direction that to_stream set failbit if !ok()
- Also the specification does not handle traits correctly - attempts to insert a string with mismatched traits if not the default.
- literal interaction with overflow is interesting - e.g., "4294967297d" on a typical implementation is defined to be 1d because overflow is checked post-static_cast.
- Howard: this is meant to be unspecified
- year::ok has quasi-editorial bug comparing y_ with min()/max() which are years
- year_month + months is insufficiently specified (need z.ok()) and needs wording to avoid UB by omission
- year_month_day_last::day()'s handling of !ok() case is unclear (and UB in the reference impl) - this has implications on a bunch of noexcepts if we keep it UB
- weekday_indexed allows [1,5] as index range, but year_month_weekday took special care to handle 0. Suggested allowing [0, 7].
- [time.format]
- What happens if an invalid specifier is encountered?
- Howard: They are treated as ordinary characters.
- "ordinary multibyte characters" wchar_t?
- Definition of "information the conversion specifier refers to" is unclear with the ISO week-based year thingys
- Howard: this is meant to be based on the general case, i.e., %G requires day-precision.
- Handling of stream flags unclear
- "unspecified value" or failbit not pinned down
- Howard: These should all set failbit, never unspecified value.
- format throws an exception in that case. Need to revisit << that are specified with format
- [time.parse]
- Same problem with ISO week-based year.
- duplicated flags?
- Check %g's interpretation if no century info?
- parse needs to use addressof for abbrev - let's check the entire subclause
- No overload taking const charT*?!
- Result/type of extraction not specified.
- time_of_day
- "Each specialization of time_of_day is a trivially copyable and standard-layout class type." Not possible for arbitrary Rep unless you ban it
- What exactly happens if constructed with a duration > 24h?
- tzdb_list
- I don't think "thread-safe" is a defined term. Double check and replace with the usual formulation
- Yep, use "does not introduce a data race".
- tzdb
- Can default construct? Is aggregate?
- Public exposition-only member that's not used anywhere