Namespaces
Variants
Actions

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