The LEWG in Belfast requested that I write a paper which provides wording
for DE 345
as modified by the discussion in LEWG. The LEWG chose the name
leap_second as a replacement for leap, and
identified the need to also change the data member of tzdb
from leaps to leap_seconds for consistency.
Modify the synopsis in [time.syn] as indicated:
... // 27.11.8, leap second support class leap_second; bool operator==(const leap_second& x, const leap_second& y); strong_ordering operator<=>(const leap_second& x, const leap_second& y); template<class Duration> bool operator==(const leap_second& x, const sys_time<Duration>& y); template<class Duration> bool operator< (const leap_second& x, const sys_time<Duration>& y); template<class Duration> bool operator< (const sys_time<Duration>& x, const leap_second& y); template<class Duration> bool operator> (const leap_second& x, const sys_time<Duration>& y); template<class Duration> bool operator> (const sys_time<Duration>& x, const leap_second& y); template<class Duration> bool operator<=(const leap_second& x, const sys_time<Duration>& y); template<class Duration> bool operator<=(const sys_time<Duration>& x, const leap_second& y); template<class Duration> bool operator>=(const leap_second& x, const sys_time<Duration>& y); template<class Duration> bool operator>=(const sys_time<Duration>& x, const leap_second& y); template<three_way_comparable_with<sys_seconds> Duration> auto operator<=>(const leap_second& x, const sys_time<Duration>& y);
Modify the synopsis in [time.zone.db.tzdb] as indicated:
namespace std::chrono {
struct tzdb {
string version;
vector<time_zone> zones;
vector<link> links;
vector<leap_second> leap_seconds;
const time_zone* locate_zone(string_view tz_name) const;
const time_zone* current_zone() const;
};
}
Modify the title of [time.zone.leap] as indicated:
Class leap_second
Modify the synopsis in [time.zone.leap.overview] as indicated:
namespace std::chrono {
class leap_second {
public:
leap_second(const leap_second&)
leap_second& operator=(const leap_second&) = default;
// unspecified additional constructors
constexpr sys_seconds date() const noexcept;
};
}
Modify [time.zone.leap.overview]/p1 as indicated:
1 Objects of type
leap_secondrepresenting the date of the leap second insertions are constructed and stored in the time zone database when initialized.
Modify [time.zone.leap.overview]/p2 as indicated:
2 [Example:
for (auto& l : get_tzdb().leap_seconds) if (l <= 2018y/March/17d) cout << l.date() << ā\nā;...
Modify [time.zone.leap.overview]/p1 as indicated:
1 Objects of type
leap_secondrepresenting the date of the leap second insertions are constructed and stored in the time zone database when initialized.
Modify [time.zone.leap.nonmembers] as indicated:
constexpr bool operator==(const leap_second& x, const leap_second& y) noexcept;1 Returns:
x.date() == y.date().constexpr strong_ordering operator<=>(const leap_second& x, const leap_second& y) noexcept;2 Returns:
x.date() <=> y.date().template<class Duration> constexpr bool operator==(const leap_second& x, const sys_time<Duration>& y) noexcept;3 Returns:
x.date() == y.template<class Duration> constexpr bool operator<(const leap_second& x, const sys_time<Duration>& y) noexcept;4 Returns:
x.date() < y.template<class Duration> constexpr bool operator<(const sys_time<Duration>& x, const leap_second& y) noexcept;5 Returns:
x < y.date().template<class Duration> constexpr bool operator>(const leap_second& x, const sys_time<Duration>& y) noexcept;6 Returns:
y < x.template<class Duration> constexpr bool operator>(const sys_time<Duration>& x, const leap_second& y) noexcept;7 Returns:
y < x.template<class Duration> constexpr bool operator<=(const leap_second& x, const sys_time<Duration>& y) noexcept;8 Returns:
!(y < x).template<class Duration> constexpr bool operator<=(const sys_time<Duration>& x, const leap_second& y) noexcept;9 Returns:
!(y < x).template<class Duration> constexpr bool operator>=(const leap_second& x, const sys_time<Duration>& y) noexcept;10 Returns:
!(x < y).template<class Duration> constexpr bool operator>=(const sys_time<Duration>& x, const leap_second& y) noexcept;11 Returns:
!(x < y).template<three_way_comparable_with<sys_seconds> Duration> constexpr auto operator<=>(const leap_second& x, const sys_time<Duration>& y) noexcept;12 Returns:
x.date() <=> y.