From 5b2aa5f4be113dc7aa4eb42de1211209664ea366 Mon Sep 17 00:00:00 2001
From: Howard Hinnant
The only change to the code is the use of
@@ -624,43 +625,43 @@ using gps_seconds = gps_time<seconds>;
template <class Duration>
sys_time<common_type_t<Duration, seconds>>
- to_sys_time(utc_time<Duration> t);
+ to_sys_time(const utc_time<Duration>& t);
template <class Duration>
sys_time<common_type_t<Duration, seconds>>
- to_sys_time(tai_time<Duration> t);
+ to_sys_time(const tai_time<Duration>& t);
template <class Duration>
sys_time<common_type_t<Duration, seconds>>
- to_sys_time(gps_time<Duration> t);
+ to_sys_time(const gps_time<Duration>& t);
template <class Duration>
utc_time<common_type_t<Duration, seconds>>
- to_utc_time(sys_time<Duration> t);
+ to_utc_time(const sys_time<Duration>& t);
template <class Duration>
utc_time<common_type_t<Duration, seconds>>
- to_utc_time(tai_time<Duration> t) noexcept;
+ to_utc_time(const tai_time<Duration>& t) noexcept;
template <class Duration>
utc_time<common_type_t<Duration, seconds>>
- to_utc_time(gps_time<Duration> t) noexcept;
+ to_utc_time(const gps_time<Duration>& t) noexcept;
template <class Duration>
tai_time<common_type_t<Duration, seconds>>
- to_tai_time(sys_time<Duration> t);
+ to_tai_time(const sys_time<Duration>& t);
template <class Duration>
tai_time<common_type_t<Duration, seconds>>
- to_tai_time(utc_time<Duration> t) noexcept;
+ to_tai_time(const utc_time<Duration>& t) noexcept;
template <class Duration>
tai_time<common_type_t<Duration, seconds>>
- to_tai_time(gps_time<Duration> t) noexcept;
+ to_tai_time(const gps_time<Duration>& t) noexcept;
template <class Duration>
gps_time<common_type_t<Duration, seconds>>
- to_gps_time(sys_time<Duration> t);
+ to_gps_time(const sys_time<Duration>& t);
template <class Duration>
gps_time<common_type_t<Duration, seconds>>
- to_gps_time(utc_time<Duration> t) noexcept;
+ to_gps_time(const utc_time<Duration>& t) noexcept;
template <class Duration>
gps_time<common_type_t<Duration, seconds>>
- to_gps_time(tai_time<Duration> t) noexcept;
+ to_gps_time(const tai_time<Duration>& t) noexcept;
template <class charT, class traits, class Duration>
basic_ostream<charT, traits>&
@@ -960,10 +961,10 @@ constexpr year_month_weekday_last operator/(const month_weekday_last& mwdl,
// time_of_day
enum {am = 1, pm};
template <class Duration> class time_of_day;
-time_of_day<hours>
-time_of_day<minutes>
-time_of_day<seconds>
-time_of_day<duration<Rep, Period>>
+template <> class time_of_day<hours>;
+template <> class time_of_day<minutes>;
+template <> class time_of_day<seconds>;
+template <class Rep, class Period> class time_of_day<duration<Rep, Period>>;
template<class charT, class traits>
basic_ostream<class charT, class traits>&
@@ -983,26 +984,28 @@ template<class charT, class traits, class Rep, class Period>
template <class Rep, class Period>
constexpr time_of_day<duration<Rep, Period>>
- make_time(duration<Rep, Period> d) noexcept;
+ make_time(const duration<Rep, Period>& d);
-constexpr time_of_day<hours> make_time(hours h, unsigned md) noexcept;
-constexpr time_of_day<minutes> make_time(hours h, minutes m, unsigned md) noexcept;
-constexpr time_of_day<seconds> make_time(hours h, minutes m, seconds s, unsigned md) noexcept;
+constexpr time_of_day<hours> make_time(const hours& h, unsigned md);
+constexpr time_of_day<minutes> make_time(const hours& h, const minutes& m, unsigned md);
+constexpr time_of_day<seconds> make_time(const hours& h, const minutes& m,
+ const seconds& s, unsigned md);
template <class Rep, class Period>
constexpr time_of_day<duration<Rep, Period>>
- make_time(hours h, minutes m, seconds s, duration<Rep, Period> sub_s, unsigned md) noexcept;
+ make_time(const hours& h, const minutes& m, const seconds& s,
+ const duration<Rep, Period>& sub_s, unsigned md);
// time zone database
-struct TZ_DB;
-const TZ_DB& get_tzdb();
+struct tzdb;
+const tzdb& get_tzdb();
const time_zone* locate_zone(const string& tz_name);
const time_zone* current_zone();
// Remote time zone database -- Needs discussion
-const TZ_DB& reload_tzdb();
+const tzdb& reload_tzdb();
string remote_version();
bool remote_download(const string& version);
bool remote_install(const string& version);
@@ -1012,23 +1015,25 @@ class nonexistent_local_time;
class ambiguous_local_time;
struct sys_info;
-ostream& operator<<(ostream& os, const sys_info& si);
+template<class charT, class traits>
+ basic_ostream<class charT, class traits>&
+ operator<<(basic_ostream<class charT, class traits>& os, const sys_info& si);
struct local_info;
-ostream& operator<<(ostream& os, const local_info& li);
+template<class charT, class traits>
+ basic_ostream<class charT, class traits>&
+ operator<<(basic_ostream<class charT, class traits>& os, const local_info& li);
enum class choose {earliest, latest};
class time_zone;
-bool operator==(const time_zone& x, const time_zone& y);
-bool operator!=(const time_zone& x, const time_zone& y);
+bool operator==(const time_zone& x, const time_zone& y) noexcept;
+bool operator!=(const time_zone& x, const time_zone& y) noexcept;
-bool operator<(const time_zone& x, const time_zone& y);
-bool operator>(const time_zone& x, const time_zone& y);
-bool operator<=(const time_zone& x, const time_zone& y);
-bool operator>=(const time_zone& x, const time_zone& y);
-
-ostream& operator<<(ostream& os, const time_zone& z);
+bool operator<(const time_zone& x, const time_zone& y) noexcept;
+bool operator>(const time_zone& x, const time_zone& y) noexcept;
+bool operator<=(const time_zone& x, const time_zone& y) noexcept;
+bool operator>=(const time_zone& x, const time_zone& y) noexcept;
template <class Duration> class zoned_time;
@@ -1050,23 +1055,23 @@ template <class Duration>
template <class Duration>
zoned_time<common_type_t<Duration, seconds>>
- make_zoned(sys_time<Duration> tp);
+ make_zoned(const sys_time<Duration>& tp);
template <class Duration>
zoned_time<common_type_t<Duration, seconds>>
- make_zoned(const time_zone* zone, local_time<Duration> tp);
+ make_zoned(const time_zone* zone, const local_time<Duration>& tp);
template <class Duration>
zoned_time<common_type_t<Duration, seconds>>
- make_zoned(const string& name, local_time<Duration> tp);
+ make_zoned(const string& name, const local_time<Duration>& tp);
template <class Duration>
zoned_time<common_type_t<Duration, seconds>>
- make_zoned(const time_zone* zone, local_time<Duration> tp, choose c);
+ make_zoned(const time_zone* zone, const local_time<Duration>& tp, choose c);
template <class Duration>
zoned_time<common_type_t<Duration, seconds>>
- make_zoned(const string& name, local_time<Duration> tp, choose c);
+ make_zoned(const string& name, const local_time<Duration>& tp, choose c);
template <class Duration>
zoned_time<common_type_t<Duration, seconds>>
@@ -1371,12 +1376,28 @@ static data members of
+For streams with
Returns:
+Modify 20.17.7 [time.clock]:
+
+1 The types defined in this subclause shall satisfy the TrivialClock requirements (20.17.3)
+unless otherwise sepcified.
+
Modify 20.17.7.1 [time.clock.system]:
@@ -1478,7 +1499,7 @@ Output:
@@ -1489,7 +1510,7 @@ to_sys_time(tai_time<Duration> u);
@@ -1500,9 +1521,9 @@ to_sys_time(gps_time<Duration> u);
Howard E. Hinnant
-2016-10-12
+2016-10-15
Extending
@@ -67,6 +67,7 @@ instead of by value.
<chrono>
to Calendars and Time Zonesnoexcept
from make_time
.Introduction
@@ -423,12 +424,12 @@ cout << zt << '\n'; // 20
local_days
in
place of sys_days
. local_days
is also a
-std::chrono::time_point
but it has no clock::now()
-functionality. This time_point
is called local_time
.
-A local_time
can refer to any time zone. In the above
-example when we pair "Asia/Tokyo" with the local_time
, the
-result becomes a zoned_time
with the local time specified by the
-local_time
.
+std::chrono::time_point
but its "clock type" local_t
+has no now()
function. This time_point
is called
+local_time
. A local_time
can refer to any time
+zone. In the above example when we pair "Asia/Tokyo" with the
+local_time
, the result becomes a zoned_time
with the
+local time specified by the local_time
.
period
which are converted to arrays of
charT
using a decimal conversion with no leading zeroes.
charT
which has a representation of 8 bits
+µs
should be encoded as UTF-8. Otherwise UTF-16 or UTF-32
+is encouraged. The implementation may substitute other encodings, including
+us
.
+os
.
+
+
@@ -1410,7 +1431,7 @@ Append new paragraphs after 20.17.7.1 [time.clock.system]/p4:
template <class Duration>
sys_time<common_type_t<Duration, seconds>>
-to_sys_time(utc_time<Duration> u);
+to_sys_time(const utc_time<Duration>& u);
template <class Duration>
sys_time<common_type_t<Duration, seconds>>
-to_sys_time(tai_time<Duration> u);
+to_sys_time(const tai_time<Duration>& u);
template <class Duration>
sys_time<common_type_t<Duration, seconds>>
-to_sys_time(gps_time<Duration> u);
+to_sys_time(const gps_time<Duration>& u);
-template <class Duration>
-ostream&
-operator<<(ostream& os, const sys_time<Duration>& tp);
+template <class charT, class traits, class Duration>
+basic_ostream<charT, traits>&
+operator<<(basic_ostream<charT, traits>& os, const sys_time<Duration>& tp);
@@ -1535,7 +1556,9 @@ cout << sys_seconds{946'684'800s} << '\n'; // 2000-01-01 00:00:00
-ostream& operator<<(ostream& os, const sys_days& dp);
+template <class charT, class traits>
+basic_ostream<charT, traits>&
+operator<<(basic_ostream<charT, traits>& os, const sys_days& dp);
@@ -1565,9 +1588,9 @@ public:
using rep = duration::rep;
using period = duration::period;
using time_point = chrono::time_point<utc_clock>;
- static constexpr bool is_steady = false;
+ static constexpr bool is_steady = unspecified;
- static time_point now() noexcept;
+ static time_point now();
};
@@ -1591,20 +1614,27 @@ to_utc_time(sys_seconds{sys_days{2000y/jan/1}}).time_since_epoch() is 946'684'82
—end example]
+utc_clock
is not a TrivialClock
unless the implementation
+can guarantee that utc_clock::now()
does not propagate an exception.
+[Note: noexcept(to_utc_time(system_clock::now()))
is
+false
. — end note]
+
-static utc_clock::time_point utc_clock::now() noexcept; +static utc_clock::time_point utc_clock::now();
-Returns: The best measure available. This may be approximated with -
to_utc_time(system_clock::now())
. +Returns: The implementations should supply the best measure available. +This may be approximated withto_utc_time(system_clock::now())
.
template <class Duration> utc_time<common_type_t<Duration, seconds>> -to_utc_time(sys_time<Duration> t); +to_utc_time(const sys_time<Duration>& t);
@@ -1639,7 +1669,7 @@ assert(u.time_since_epoch() - t.time_since_epoch() == 26s);
template <class Duration> utc_time<common_type_t<Duration, seconds>> -to_utc_time(tai_time<Duration> t) noexcept; +to_utc_time(const tai_time<Duration>& t) noexcept;@@ -4689,7 +4764,9 @@ constexpr year_month_day operator-(const year_month_day& ymd, const years&am@@ -1653,7 +1683,7 @@ to_utc_time(tai_time<Duration> t) noexcept;
template <class Duration> utc_time<common_type_t<Duration, seconds>> -to_utc_time(gps_time<Duration> t) noexcept; +to_utc_time(const gps_time<Duration>& t) noexcept;@@ -4663,8 +4738,8 @@ constexpr year_month_day operator+(const year_month_day& ymd, const years&am@@ -1720,9 +1750,9 @@ public: using rep = duration::rep; using period = duration::period; using time_point = chrono::time_point<tai_clock>; - static constexpr bool is_steady = false; + static constexpr bool is_steady = unspecified; - static time_point now() noexcept; + static time_point now(); }; @@ -1735,20 +1765,27 @@ example by 2000-01-01 there had been 22 leap seconds inserted so 2000-01-01 00:0 is equivalent to 2000-01-01 00:00:32 TAI (22s plus the initial 10s offset).
++
+tai_clock
is not aTrivialClock
unless the implementation +can guarantee thattai_clock::now()
does not propagate an exception. +[Note:noexcept(to_tai_time(system_clock::now()))
is +false
. — end note] +-static tai_clock::time_point tai_clock::now() noexcept; +static tai_clock::time_point tai_clock::now();-Returns: The best measure available. This may be approximated with -
to_tai_time(system_clock::now())
. +Returns: The implementations should supply the best measure available. This may +be approximated withto_tai_time(system_clock::now())
.template <class Duration> tai_time<common_type_t<Duration, seconds>> -to_tai_time(sys_time<Duration> t); +to_tai_time(const sys_time<Duration>& t);@@ -1759,7 +1796,7 @@ to_tai_time(sys_time<Duration> t);
template <class Duration> tai_time<common_type_t<Duration, seconds>> -to_tai_time(utc_time<Duration> t) noexcept; +to_tai_time(const utc_time<Duration>& t) noexcept;@@ -1773,7 +1810,7 @@ to_tai_time(utc_time<Duration> t) noexcept;
template <class Duration> tai_time<common_type_t<Duration, seconds>> -to_tai_time(gps_time<Duration> t) noexcept; +to_tai_time(const gps_time<Duration>& t) noexcept;@@ -1791,18 +1828,13 @@ operator<<(basic_ostream<charT, traits>& os, const tai_time<D
-Effects: Creates a
sys_time
fromt
as if by: +Effects: Equivalent to:-auto tp = sys_time<common_type_t<Duration, seconds>>{t.time_since_epoch()} - (sys_days{1970y/jan/1} - sys_days{1958y/jan/1}); +return os << tp;-And then streams that
-sys_time
:os << tp
. --Returns:
os
. -@@ -1819,9 +1851,9 @@ public: using rep = duration::rep; using period = duration::period; using time_point = chrono::time_point<gps_clock>; - static constexpr bool is_steady = false; + static constexpr bool is_steady = unspecified; - static time_point now() noexcept; + static time_point now(); }; @@ -1834,20 +1866,27 @@ the 10s offset between 1958 and 1970 and the additional 9 leap seconds inserted 1970 and 1980.
++
+gps_clock
is not aTrivialClock
unless the implementation +can guarantee thatgps_clock::now()
does not propagate an exception. +[Note:noexcept(to_gps_time(system_clock::now()))
is +false
. — end note] +-static gps_clock::time_point gps_clock::now() noexcept; +static gps_clock::time_point gps_clock::now();-Returns: The best measure available. This may be approximated with -
to_gps_time(system_clock::now())
. +Returns: The implementations should supply the best measure available. This may +be approximated withto_gps_time(system_clock::now())
.template <class Duration> gps_time<common_type_t<Duration, seconds>> -to_gps_time(sys_time<Duration> t); +to_gps_time(const sys_time<Duration>& t);@@ -1858,7 +1897,7 @@ to_gps_time(sys_time<Duration> t);
template <class Duration> gps_time<common_type_t<Duration, seconds>> -to_gps_time(utc_time<Duration> t) noexcept; +to_gps_time(const utc_time<Duration>& t) noexcept;@@ -1872,7 +1911,7 @@ to_gps_time(utc_time<Duration> t) noexcept;
template <class Duration> gps_time<common_type_t<Duration, seconds>> -to_gps_time(tai_time<Duration> t) noexcept; +to_gps_time(const tai_time<Duration>& t) noexcept;@@ -1890,18 +1929,13 @@ operator<<(basic_ostream<charT, traits>& os, const gps_time<D
-Effects: Creates a
sys_time
fromt
as if by: +Effects: Equivalent to:-auto tp = sys_time<common_type_t<Duration, seconds>>{t.time_since_epoch()} + (sys_days{1980y/jan/sun[1]} - sys_days{1970y/jan/1}); +return os << tp;-And then streams that
-sys_time
:os << tp
. --Returns:
os
. -@@ -1926,7 +1960,9 @@ The following stream insertion operators exist for
local_time<Duration&
-template <class Duration> ostream& operator<<(ostream& os, const local_time<Duration>& lt); +template <class charT, class traits, class Duration> +basic_ostream<charT, traits>& +operator<<(basic_ostream<charT, traits>& os, const local_time<Duration>& lt);@@ -1957,7 +1993,7 @@ tosys_days
andlocal_days
.The struct
@@ -2018,7 +2054,9 @@ constexpr day operator+(const days& x, const day& y) noexcept; constexpr day operator-(const day& x, const days& y) noexcept; constexpr days operator-(const day& x, const day& y) noexcept; -ostream& operator<<(ostream& os, const day& d); +template <class charT, class traits> +basic_ostream<charT, traits>& +operator<<(basic_ostream<charT, traits>& os, const day& d);last_spec
is used in conjunction with other calendar types to -indicate the last in a sequence. For example, depending on context, it can represent +specify the last in a sequence. For example, depending on context, it can represent the last day of a month, or the last day of the week of a month.@@ -2239,7 +2277,9 @@ constexpr days operator-(const day& x, const day& y) noexcept;
-ostream& operator<<(ostream& os, const day& d); +template <class charT, class traits> +basic_ostream<charT, traits>& +operator<<(basic_ostream<charT, traits>& os, const day& d);@@ -2309,7 +2349,9 @@ constexpr month operator+(const months& x, const month& y) noexcept; constexpr month operator-(const month& x, const months& y) noexcept; constexpr months operator-(const month& x, const month& y) noexcept; -ostream& operator<<(ostream& os, const month& m); +template <class charT, class traits> + basic_ostream<charT, traits>& + operator<<(basic_ostream<charT, traits>& os, const month& m);@@ -2505,8 +2547,9 @@ arithmetic. [Note: For example
month{0}
becomesmonth{ and
month{13}
becomesmonth{1}
. — end note]-Complexity: O(1) with respect to the value of
y
. That is, repeated -increments or decrements is not a valid implementation. +Complexity: O(1) with respect to the value ofy
. +[Note: Repeated +increments or decrements is not a valid implementation. — end note]Example:
feb + months{11} == jan
. @@ -2555,7 +2598,9 @@ constexpr months operator-(const month& x, const month& y) noexcept;-ostream& operator<<(ostream& os, const month& m); +template <class charT, class traits> +basic_ostream<charT, traits>& +operator<<(basic_ostream<charT, traits>& os, const month& m);@@ -2619,7 +2664,9 @@ constexpr year operator+(const years& x, const year& y) noexcept; constexpr year operator-(const year& x, const years& y) noexcept; constexpr years operator-(const year& x, const year& y) noexcept; -ostream& operator<<(ostream& os, const year& y); +template <class charT, class traits> + basic_ostream<charT, traits>& + operator<<(basic_ostream<charT, traits>& os, const year& y);@@ -2871,13 +2918,15 @@ constexpr years operator-(const year& x, const year& y) noexcept;
-ostream& operator<<(ostream& os, const year& y); +template <class charT, class traits> +basic_ostream<charT, traits>& +operator<<(basic_ostream<charT, traits>& os, const year& y);@@ -3167,8 +3218,9 @@ arithmetic. [Note: For exampleEffects: Inserts a signed decimal integral text representation of
y
-intoos
. If the year is less than four decimal digits, pads the year with +intoos
. If the year is in the range [-999, 999], prefixes the year with'0'
to four digits. If the year is negative, prefixes with'-'
.@@ -2899,14 +2948,14 @@ constexpr year operator "" y(unsigned long long y) noexcept;
weekday
represents a day of the week in the civil calendar. It -normally holds values in the range 0 to 6, corresponding to Sunday thru +normally holds values in the range 0 to 6, corresponding to Sunday through Saturday. However it may hold non-negative values outside this range. It can be constructed with anyunsigned
value, which will be subsequently truncated to fit intoweekday
's unspecified internal storage.weekday
is equality comparable.weekday
is not less-than comparable because there is no universal consensus on which day is the first day of the week. This design chooses the encoding of 0 to 6 to represent -Sunday thru Saturday only because this is consistent with existing C and C++ +Sunday through Saturday only because this is consistent with existing C and C++ practice. Howeverweekday
's comparison and arithmetic operations treat the days of the week as a circular range, with no beginning and no end. One can stream out aweekday
.weekday
has explicit @@ -2959,7 +3008,9 @@ constexpr weekday operator+(const days& x, const weekday& y) noexcept constexpr weekday operator-(const weekday& x, const days& y) noexcept; constexpr days operator-(const weekday& x, const weekday& y) noexcept; -ostream& operator<<(ostream& os, const weekday& wd); +template <class charT, class traits> + basic_ostream<charT, traits>& + operator<<(basic_ostream<charT, traits>& os, const weekday& wd);@@ -2991,7 +3042,7 @@ the week in
wd_
.Example: If
dp
represents 1970-01-01, the constructed -weekday
shall represent Thursday by storing 4 inwd_
. +weekday
represents Thursday by storing 4 inwd_
.weekday{7}
becomesweekday{0}
. — end note]-Complexity: O(1) with respect to the value of
y
. That is, repeated -increments or decrements is not a valid implementation. +Complexity: O(1) with respect to the value ofy
. +[Note: Repeated +increments or decrements is not a valid implementation. — end note]Example:
mon + days{6} == sun
. @@ -3217,7 +3269,9 @@ constexpr days operator-(const weekday& x, const weekday& y) noexcept;-ostream& operator<<(ostream& os, const weekday& wd); +template <class charT, class traits> +basic_ostream<charT, traits>& +operator<<(basic_ostream<charT, traits>& os, const weekday& wd);@@ -3270,7 +3324,9 @@ public: constexpr bool operator==(const weekday_indexed& x, const weekday_indexed& y) noexcept; constexpr bool operator!=(const weekday_indexed& x, const weekday_indexed& y) noexcept; -ostream& operator<<(ostream& os, const weekday_indexed& wdi); +template <class charT, class traits> + basic_ostream<charT, traits>& + operator<<(basic_ostream<charT, traits>& os, const weekday_indexed& wdi);@@ -3341,17 +3397,18 @@ constexpr bool operator!=(const weekday_indexed& x, const weekday_indexed&am
-ostream& operator<<(ostream& os, const weekday_indexed& wdi); +template <class charT, class traits> +basic_ostream<charT, traits>& +operator<<(basic_ostream<charT, traits>& os, const weekday_indexed& wdi);-Effects: Inserts -
-os << wdi.weekday() << '[' << wdi.index() << ']'
. --Returns:
+os
. +Effects: Equivalent to:+return os << wdi.weekday() << '[' << wdi.index() << ']'; +20.17.8.7 Class
@@ -3389,7 +3446,9 @@ public: constexpr bool operator==(const weekday_last& x, const weekday_last& y) noexcept; constexpr bool operator!=(const weekday_last& x, const weekday_last& y) noexcept; -ostream& operator<<(ostream& os, const weekday_last& wdl); +template <class charT, class traits> + basic_ostream<charT, traits>& + operator<<(basic_ostream<charT, traits>& os, const weekday_last& wdl);weekday_last
[time.calendar.weekday_last]@@ -3450,17 +3509,18 @@ constexpr bool operator!=(const weekday_last& x, const weekday_last& y)
-ostream& operator<<(ostream& os, const weekday_last& wdl); +template <class charT, class traits> +basic_ostream<charT, traits>& +operator<<(basic_ostream<charT, traits>& os, const weekday_last& wdl);-Effects: Inserts -
-os << wdi.weekday() << "[last]"
. --Returns:
+os
. +Effects: Equivalent to:+return os << wdi.weekday() << "[last]"; +20.17.8.8 Class
@@ -3494,7 +3554,9 @@ constexpr bool operator> (const month_day& x, const month_day& y) noe constexpr bool operator<=(const month_day& x, const month_day& y) noexcept; constexpr bool operator>=(const month_day& x, const month_day& y) noexcept; -ostream& operator<<(ostream& os, const month_day& md); +template <class charT, class traits> + basic_ostream<charT, traits>& + operator<<(basic_ostream<charT, traits>& os, const month_day& md);month_day
[time.calendar.month_day]@@ -3610,17 +3672,18 @@ constexpr bool operator>=(const month_day& x, const month_day& y) noe
-ostream& operator<<(ostream& os, const month_day& md); +template <class charT, class traits> +basic_ostream<charT, traits>& +operator<<(basic_ostream<charT, traits>& os, const month_day& md);-Effects: Inserts -
-os << md.month() << '/' << md.day()
. --Returns:
+os
. +Effects: Equivalent to:+return os << md.month() << '/' << md.day(); +20.17.8.9 Class
@@ -3663,7 +3726,9 @@ constexpr bool operator> (const month_day_last& x, const month_day_last&a constexpr bool operator<=(const month_day_last& x, const month_day_last& y) noexcept; constexpr bool operator>=(const month_day_last& x, const month_day_last& y) noexcept; -ostream& operator<<(ostream& os, const month_day_last& mdl); +template <class charT, class traits> + basic_ostream<charT, traits>& + operator<<(basic_ostream<charT, traits>& os, const month_day_last& mdl);month_day_last
[time.calendar.month_day_last]@@ -3764,17 +3829,18 @@ constexpr bool operator>=(const month_day_last& x, const month_day_last&a
-ostream& operator<<(ostream& os, const month_day_last& mdl); +template <class charT, class traits> +basic_ostream<charT, traits>& +operator<<(basic_ostream<charT, traits>& os, const month_day_last& mdl);-Effects: Inserts -
-os << mdl.month() << "/last"
. --Returns:
+os
. +Effects: Equivalent to:+return os << mdl.month() << "/last"; +20.17.8.10 Class
@@ -3801,7 +3867,9 @@ public: constexpr bool operator==(const month_weekday& x, const month_weekday& y) noexcept; constexpr bool operator!=(const month_weekday& x, const month_weekday& y) noexcept; -ostream& operator<<(ostream& os, const month_weekday& mwd); +template <class charT, class traits> + basic_ostream<charT, traits>& + operator<<(basic_ostream<charT, traits>& os, const month_weekday& mwd);month_weekday
[time.calendar.month_weekday]@@ -3872,17 +3940,18 @@ constexpr bool operator!=(const month_weekday& x, const month_weekday& y
-ostream& operator<<(ostream& os, const month_weekday& mwd); +template <class charT, class traits> +basic_ostream<charT, traits>& +operator<<(basic_ostream<charT, traits>& os, const month_weekday& mwd);-Effects: Inserts -
-os << mwd.month() << '/' << mwd.weekday_indexed()
. --Returns:
+os
. +Effects: Equivalent to:+return os << mwd.month() << '/' << mwd.weekday_indexed(); +20.17.8.11 Class
@@ -3911,7 +3980,9 @@ public: constexpr bool operator==(const month_weekday_last& x, const month_weekday_last& y) noexcept; constexpr bool operator!=(const month_weekday_last& x, const month_weekday_last& y) noexcept; -ostream& operator<<(ostream& os, const month_weekday_last& mwdl); +template <class charT, class traits> + basic_ostream<charT, traits>& + operator<<(basic_ostream<charT, traits>& os, const month_weekday_last& mwdl);month_weekday_last
[time.calendar.month_weekday_last]@@ -3983,17 +4054,18 @@ constexpr bool operator!=(const month_weekday_last& x, const month_weekday_l
-ostream& operator<<(ostream& os, const month_weekday_last& mwdl); +template <class charT, class traits> +basic_ostream<charT, traits>& +operator<<(basic_ostream<charT, traits>& os, const month_weekday_last& mwdl);-Effects: Inserts -
-os << mwdl.month() << '/' << mwdl.weekday_last()
. --Returns:
+os
. +Effects: Equivalent to:+return os << mwdl.month() << '/' << mwdl.weekday_last(); +20.17.8.12 Class
@@ -4042,7 +4114,9 @@ constexpr year_month operator+(const year_month& ym, const years& dy) no constexpr year_month operator+(const years& dy, const year_month& ym) noexcept; constexpr year_month operator-(const year_month& ym, const years& dy) noexcept; -ostream& operator<<(ostream& os, const year_month& ym); +template <class charT, class traits> + basic_ostream<charT, traits>& + operator<<(basic_ostream<charT, traits>& os, const year_month& ym);year_month
[time.calendar.year_month]@@ -4282,17 +4356,18 @@ constexpr year_month operator-(const year_month& ym, const years& dy) noexcept;
-ostream& operator<<(ostream& os, const year_month& ym); +template <class charT, class traits> +basic_ostream<charT, traits>& +operator<<(basic_ostream<charT, traits>& os, const year_month& ym);-Effects: Inserts -
-os << ym.year() << '/' << ym.month()
. --Returns:
+os
. +Effects: Equivalent to:+return os << ym.year() << '/' << ym.month(); +20.17.8.13 Class
@@ -4350,7 +4425,9 @@ constexpr year_month_day operator+(const years& dy, const year_month_day& constexpr year_month_day operator-(const year_month_day& ymd, const months& dm) noexcept; constexpr year_month_day operator-(const year_month_day& ymd, const years& dy) noexcept; -ostream& operator<<(ostream& os, const year_month_day& ymd); +template <class charT, class traits> + basic_ostream<charT, traits>& + operator<<(basic_ostream<charT, traits>& os, const year_month_day& ymd);year_month_day
[time.calendar.year_month_day]@@ -4529,13 +4606,11 @@ constexpr explicit year_month_day::operator local_days() const noexcept; Requires:
ok() == true
.-Returns: A
-local_days
which represents the date represented by -*this
. --Remarks: Shall return a value equivalent to -
+local_days{static_cast<sys_days>(*this).time_since_epoch()}
. +Effects: Equivalent to:+return local_days{static_cast<sys_days>(*this).time_since_epoch()}; +@@ -4628,7 +4703,7 @@ constexpr year_month_day operator+(const year_month_day& ymd, const months&aRemarks: If
ymd.day()
is in the range[1d, 28d]
, -the resultantyear_month_day
is guaranteed to returntrue
from +the resultantyear_month_day
shall returntrue
fromok()
.Remarks: If
ymd.month()
isfeb
andymd.day()
-is not in the range[1d, 28d]
, the resultantyear_month_day
is -not guaranteed to returntrue
fromok()
. +is not in the range[1d, 28d]
, the resultantyear_month_day
may +returnfalse
fromok()
.
-ostream& operator<<(ostream& os, const year_month_day& ymd); +template <class charT, class traits> +basic_ostream<charT, traits>& +operator<<(basic_ostream<charT, traits>& os, const year_month_day& ymd);
@@ -4756,7 +4833,9 @@ constexpr year_month_day_last operator+(const years& dy, const year_month_da constexpr year_month_day_last operator-(const year_month_day_last& ymdl, const months& dm) noexcept; constexpr year_month_day_last operator-(const year_month_day_last& ymdl, const years& dy) noexcept; -ostream& operator<<(ostream& os, const year_month_day_last& ymdl); +template <class charT, class traits> + basic_ostream<charT, traits>& + operator<<(basic_ostream<charT, traits>& os, const year_month_day_last& ymdl);@@ -4893,13 +4972,11 @@ constexpr explicit year_month_day_last::operator local_days() const noexcept; Requires:
ok() == true
.-Returns: A
-local_days
which represents the date represented by -*this
. --Remarks: Shall return a value equivalent to -
+local_days{static_cast<sys_days>(*this).time_since_epoch()}
. +Effects: Equivalent to:+return local_days{static_cast<sys_days>(*this).time_since_epoch()}; +
@@ -4986,7 +5063,7 @@ constexpr year_month_day_last operator+(const year_month_day_last& ymdl, con Returns:(ymdl.year() / ymdl.month() + dm) / last
.-Postconditions: The resultant
year_month_day_last
will return +Postconditions: The resultantyear_month_day_last
returnstrue
fromok()
.@@ -5045,17 +5122,18 @@ constexpr year_month_day_last operator-(const year_month_day_last& ymdl, con
-ostream& operator<<(ostream& os, const year_month_day_last& ymdl); +template <class charT, class traits> +basic_ostream<charT, traits>& +operator<<(basic_ostream<charT, traits>& os, const year_month_day_last& ymdl);-Effects: Inserts -
-os << ymdl.year() << '/' << ymdl.month_day_last()
. --Returns:
+os
. +Effects: Equivalent to:+return os << ymdl.year() << '/' << ymdl.month_day_last(); +20.17.8.15 Class
@@ -5111,7 +5189,9 @@ constexpr year_month_weekday operator+(const years& dy, const year_month_wee constexpr year_month_weekday operator-(const year_month_weekday& ymwd, const months& dm) noexcept; constexpr year_month_weekday operator-(const year_month_weekday& ymwd, const years& dy) noexcept; -ostream& operator<<(ostream& os, const year_month_weekday& ymwdi); +template <class charT, class traits> + basic_ostream<charT, traits>& + operator<<(basic_ostream<charT, traits>& os, const year_month_weekday& ymwdi);year_month_weekday
[time.calendar.year_month_weekday]
@@ -5288,13 +5368,11 @@ constexpr explicit year_month_weekday::operator local_days() const noexcept;
Requires: ok() == true
.
-Returns: A local_days
which represents the date represented by
-*this
.
-
-Remarks: Shall return a value equivalent to
-local_days{static_cast<sys_days>(*this).time_since_epoch()}
.
+Effects: Equivalent to:
+return local_days{static_cast<sys_days>(*this).time_since_epoch()}; +
@@ -5341,7 +5419,7 @@ constexpr year_month_weekday operator+(const year_month_weekday& ymwd, const Returns:(ymwd.year() / ymwd.month() + dm) / ymwd.weekday_indexed()
.-Postconditions: The resultant
year_month_weekday
will return +Postconditions: The resultantyear_month_weekday
returnstrue
fromok()
.@@ -5400,17 +5478,18 @@ constexpr year_month_weekday operator-(const year_month_weekday& ymwd, const
-ostream& operator<<(ostream& os, const year_month_weekday& ymwd); +template <class charT, class traits> +basic_ostream<charT, traits>& +operator<<(basic_ostream<charT, traits>& os, const year_month_weekday& ymwd);-Effects: Inserts -
-os << ymwdi.year() << '/' << ymwdi.month() << '/' << ymwdi.weekday_indexed()
. --Returns:
+os
. +Effects: Equivalent to:+return os << ymwdi.year() << '/' << ymwdi.month() << '/' << ymwdi.weekday_indexed(); +20.17.8.16 Class
@@ -5485,7 +5564,9 @@ constexpr year_month_weekday_last operator-(const year_month_weekday_last& ymwdl, const years& dy) noexcept; -ostream& operator<<(ostream& os, const year_month_weekday_last& ymwdl); +template <class charT, class traits> + basic_ostream<charT, traits>& + operator<<(basic_ostream<charT, traits>& os, const year_month_weekday_last& ymwdl);year_month_weekday_last
[time.calendar.year_month_weekday_last]
@@ -5622,13 +5703,11 @@ constexpr explicit year_month_weekday_last::operator local_days() const noexcept
Requires: ok() == true
.
-Returns: A local_days
which represents the date represented by
-*this
.
-
-Remarks: Shall return a value equivalent to
-local_days{static_cast<sys_days>(*this).time_since_epoch()}
.
+Effects: Equivalent to:
+return local_days{static_cast<sys_days>(*this).time_since_epoch()}; +
@@ -5673,7 +5752,7 @@ constexpr year_month_weekday_last operator+(const year_month_weekday_last& y Returns:(ymwdl.year() / ymwdl.month() + dm) / ymwdl.weekday_last()
.-Postconditions: The resultant
year_month_weekday_last
will return +Postconditions: The resultantyear_month_weekday_last
returnstrue
fromok()
.@@ -5732,17 +5811,18 @@ constexpr year_month_weekday_last operator-(const year_month_weekday_last& y
-ostream& operator<<(ostream& os, const year_month_weekday_last& ymwdl); +template <class charT, class traits> +basic_ostream<charT, traits>& +operator<<(basic_ostream<charT, traits>& os, const year_month_weekday_last& ymwdl);-Effects: Inserts -
-os << ymwdl.year() << '/' << ymwdl.month() << '/' << ymwdl.weekday_last()
. --Returns:
+os
. +Effects: Equivalent to:+return os << ymwdl.year() << '/' << ymwdl.month() << '/' << ymwdl.weekday_last(); +20.17.8.17 civil calendar conventional syntax operators [time.calendar.operators]
@@ -5782,8 +5862,8 @@ month_day md2 = 4d/apr;
-Everything not intended as above is caught as a compile-time error, with the notable
-exception of an expression that consists of nothing but int
, which of course
+Everything not intended as above is ill-formed, with the notable
+exception of an expression that consists of nothing but int
, which
has type int
.
-The last example may be clear to a human reader. But the compiler doesn't know if
-2015
refers to a year
or a day
. Instead of
-guessing, the compiler flags it as an error.
-
year_month
:
@@ -6164,7 +6238,7 @@ There are 4 specializations of time_of_day
to handle four precision
-time_of_day<hours> +tempalte <> class time_of_day<hours>
This specialization handles hours since midnight. @@ -6173,7 +6247,7 @@ This specialization handles hours since midnight.
-time_of_day<minutes> +tempalte <> class time_of_day<minutes>This specialization handles hours:minutes since midnight. @@ -6182,7 +6256,7 @@ This specialization handles hours:minutes since midnight.
-time_of_day<seconds> +tempalte <> class time_of_day<seconds>This specialization handles hours:minutes:seconds since midnight. @@ -6191,10 +6265,11 @@ This specialization handles hours:minutes:seconds since midnight.
-time_of_day<duration<Rep, Period>> +tempalte <class Rep, class Period> class time_of_day<duration<Rep, Period>>@@ -6209,7 +6284,8 @@ Each specialization of-This specialization is restricted to
Period
s that are shorter than 1 +This specialization is restricted toRep
types that are integral, and +Period
s that are shorter than 1 second. Typical uses are with milliseconds, microseconds and nanoseconds. This specialization handles hours:minute:seconds.fractional_seconds since midnight.time_of_day
is a literal class type.-time_of_day<hours> +tempalte <> +class time_of_day<hours> { public: using precision = hours; @@ -6223,8 +6299,8 @@ public: constexpr explicit operator precision() const noexcept; constexpr precision to_duration() const noexcept; - void make24() noexcept; - void make12() noexcept; + constexpr void make24() noexcept; + constexpr void make12() noexcept; };@@ -6304,7 +6380,7 @@ constexpr precision to_duration() const noexcept;-void time_of_day<hours>::make24() noexcept; +constexpr void time_of_day<hours>::make24() noexcept;@@ -6315,7 +6391,7 @@ Otherwise, no effects.-void time_of_day<hours>::make12() noexcept; +constexpr void time_of_day<hours>::make12() noexcept;@@ -6326,7 +6402,9 @@ Otherwise, no effects.-ostream& operator<<(ostream& os, const time_of_day<hours>& t); +template <class charT, class traits> +basic_ostream<charT, traits>& +operator<<(basic_ostream<charT, traits>& os, const time_of_day<hours>& t);@@ -6353,7 +6431,8 @@ that no leading zero is output for hours less than 10.-time_of_day<minutes> +tempalte <> +class time_of_day<minutes> { public: using precision = minutes; @@ -6485,7 +6564,9 @@ Otherwise, no effects.-ostream& operator<<(ostream& os, const time_of_day<minutes>& t); +template <class charT, class traits> +basic_ostream<charT, traits>& +operator<<(basic_ostream<charT, traits>& os, const time_of_day<minutes>& t);@@ -6512,7 +6593,8 @@ that no leading zero is output for hours less than 10.-time_of_day<seconds> +tempalte <> +class time_of_day<seconds> { public: using precision = seconds; @@ -6659,7 +6741,9 @@ Otherwise, no effects.
-ostream& operator<<(ostream& os, const time_of_day<seconds>& t); +template <class charT, class traits> +basic_ostream<charT, traits>& +operator<<(basic_ostream<charT, traits>& os, const time_of_day<seconds>& t);
@@ -6686,7 +6770,8 @@ that no leading zero is output for hours less than 10.
-time_of_day<duration<Rep, Period>> +tempalte <class Rep, class Period> +class time_of_day<duration<Rep, Period>> { public: using precision = duration<Rep, Period>; @@ -6855,7 +6940,9 @@ Otherwise, no effects.-ostream& operator<<(ostream& os, const time_of_day<duration<Rep, Period>>& t); +template <class charT, class traits> +basic_ostream<charT, traits>& +operator<<(basic_ostream<charT, traits>& os, const time_of_day<duration<Rep, Period>>& t);@@ -6894,7 +6981,7 @@ the helper function. template <class Rep, class Period> constexpr time_of_day<duration<Rep, Period>> -make_time(duration<Rep, Period> d) noexcept; +make_time(const duration<Rep, Period>& d);
@@ -6906,7 +6993,7 @@ make_time(duration<Rep, Period> d) noexcept;constexpr time_of_day<hours> -make_time(hours h, unsigned md) noexcept; +make_time(const hours& h, unsigned md);@@ -6918,7 +7005,7 @@ make_time(hours h, unsigned md) noexcept;@@ -7350,7 +7442,9 @@ out with theconstexpr time_of_day<minutes> -make_time(hours h, minutes m, unsigned md) noexcept; +make_time(const hours& h, const minutes& m, unsigned md);@@ -6930,8 +7017,8 @@ make_time(hours h, minutes m, unsigned md) noexcept;constexpr time_of_day<seconds> -make_time(hours h, minutes m, seconds s, - unsigned md) noexcept; +make_time(const hours& h, const minutes& m, const seconds& s, + unsigned md);@@ -6941,16 +7028,19 @@ make_time(hours h, minutes m, seconds s,-template <class Rep, class Period, - class = enable_if_t<ratio_less<Period, ratio<1>>::value>> +template <class Rep, class Period> constexpr time_of_day<duration<Rep, Period>> -make_time(hours h, minutes m, seconds s, - duration<Rep, Period> sub_s, unsigned md) noexcept +make_time(const hours& h, const minutes& m, const seconds& s, + const duration<Rep, Period>& sub_s, unsigned md)@@ -6977,7 +7067,7 @@ functions access it.+Remarks: This function shall not participate in overload resolution unless +
+ratio_less<Period, ratio<1>>::value
istrue
. +Returns:
time_of_day<duration<Rep, Period>>(h, m, s, sub_s, md)
.-struct TZ_DB +struct tzdb { string version; vector<time_zone> zones; @@ -6987,14 +7077,14 @@ struct TZ_DB-The
TZ_DB database is a singleton. And access to it is +The tzdb database is a singleton. And access to it is read-only, except for reload_tzdb()
which re-initializes it. Eachvector
is sorted to enable fast lookup. You can iterate over and inspect this database.-const TZ_DB& get_tzdb(); +const tzdb& get_tzdb();@@ -7063,7 +7153,7 @@ other sections depend upon this subsection.@@ -7010,7 +7100,7 @@ one time.
Throws:
runtime_error
if for any reason a reference can not -be returned to a validTZ_DB
. +be returned to a validtzdb
.-const TZ_DB& reload_tzdb(); +const tzdb& reload_tzdb();@@ -7314,7 +7404,9 @@ map abbreviations back to a@@ -7072,7 +7162,7 @@ const TZ_DB& reload_tzdb(); IANA website is unavailable, or if the latest version is already installed, there are no effects. Otherwise, a new version is available. It is downloaded and installed, and then the program re-initializes -the
TZ_DB
singleton from the new disk files. +thetzdb
singleton from the new disk files.Returns: A
const
reference to the database. @@ -7087,7 +7177,7 @@ to safely use this function. If this function re-initializes the database, allThrows:
runtime_error
if for any reason a reference can not -be returned to a validTZ_DB
. +be returned to a validtzdb
.time_zone
and UTC offset. Asys_info
can be streamed out in an unspecified format:-ostream& operator<<(ostream& os, const sys_info& r); +template <class charT, class traits> +basic_ostream<charT, traits>& +operator<<(basic_ostream<charT, traits>& os, const sys_info& r);sys_info
that starts just before the Alocal_info
can be streamed out in an unspecified format:-ostream& operator<<(ostream& os, const local_info& r); +template <class charT, class traits> +basic_ostream<charT, traits>& +operator<<(basic_ostream<charT, traits>& os, const local_info& r);20.17.10.4 Class
@@ -7368,7 +7462,7 @@ public: time_zone(const time_zone&) = delete; time_zone& operator=(const time_zone&) = delete; - const string& name() const; + const string& name() const noexcept; template <class Duration> sys_info get_info(sys_time<Duration> st) const; template <class Duration> local_info get_info(local_time<Duration> tp) const; @@ -7386,17 +7480,15 @@ public: to_local(sys_time<Duration> tp) const; }; -bool operator==(const time_zone& x, const time_zone& y); -bool operator!=(const time_zone& x, const time_zone& y); -bool operator< (const time_zone& x, const time_zone& y); -bool operator> (const time_zone& x, const time_zone& y); -bool operator<=(const time_zone& x, const time_zone& y); -bool operator>=(const time_zone& x, const time_zone& y); - -ostream& operator<<(ostream& os, const time_zone& z) +bool operator==(const time_zone& x, const time_zone& y) noexcept; +bool operator!=(const time_zone& x, const time_zone& y) noexcept; +bool operator< (const time_zone& x, const time_zone& y) noexcept; +bool operator> (const time_zone& x, const time_zone& y) noexcept; +bool operator<=(const time_zone& x, const time_zone& y) noexcept; +bool operator>=(const time_zone& x, const time_zone& y) noexcept;time_zone
[time.timezone.time_zone]-const string& time_zone::name() const; +const string& time_zone::name() const noexcept;@@ -7483,7 +7575,7 @@ time_zone::to_local(sys_time<Duration> tp) const;
-bool operator==(const time_zone& x, const time_zone& y); +bool operator==(const time_zone& x, const time_zone& y) noexcept;@@ -7492,7 +7584,7 @@ bool operator==(const time_zone& x, const time_zone& y);
-bool operator!=(const time_zone& x, const time_zone& y); +bool operator!=(const time_zone& x, const time_zone& y) noexcept;@@ -7501,7 +7593,7 @@ bool operator!=(const time_zone& x, const time_zone& y);
-bool operator<(const time_zone& x, const time_zone& y); +bool operator<(const time_zone& x, const time_zone& y) noexcept;@@ -7510,7 +7602,7 @@ bool operator<(const time_zone& x, const time_zone& y);
-bool operator>(const time_zone& x, const time_zone& y); +bool operator>(const time_zone& x, const time_zone& y) noexcept;@@ -7519,7 +7611,7 @@ bool operator>(const time_zone& x, const time_zone& y);
-bool operator<=(const time_zone& x, const time_zone& y); +bool operator<=(const time_zone& x, const time_zone& y) noexcept;@@ -7528,7 +7620,7 @@ bool operator<=(const time_zone& x, const time_zone& y);
-bool operator>=(const time_zone& x, const time_zone& y); +bool operator>=(const time_zone& x, const time_zone& y) noexcept;-@@ -7536,15 +7628,6 @@ bool operator>=(const time_zone& x, const time_zone& y);
-ostream& operator<<(ostream& os, const time_zone& z) -----Produces an unspecified output representing the
-time_zone
. -20.17.10.5 Class
zoned_time
[time.timezone.zoned_time]@@ -7566,17 +7649,17 @@ public: zoned_time(const zoned_time&) = default; zoned_time& operator=(const zoned_time&) = default; - zoned_time(sys_time<Duration> st); + zoned_time(const sys_time<Duration>& st); explicit zoned_time(const time_zone* z); explicit zoned_time(const string& name); template <class Duration2> zoned_time(const zoned_time<Duration2>& zt) noexcept; - zoned_time(const time_zone* z, local_time<Duration> tp); - zoned_time(const string& name, local_time<Duration> tp); - zoned_time(const time_zone* z, local_time<Duration> tp, choose c); - zoned_time(const string& name, local_time<Duration> tp, choose c); + zoned_time(const time_zone* z, const local_time<Duration>& tp); + zoned_time(const string& name, const local_time<Duration>& tp); + zoned_time(const time_zone* z, const local_time<Duration>& tp, choose c); + zoned_time(const string& name, const local_time<Duration>& tp, choose c); zoned_time(const time_zone* z, const zoned_time<Duration>& zt); zoned_time(const string& name, const zoned_time<Duration>& zt); @@ -7586,8 +7669,8 @@ public: zoned_time(const time_zone* z, const sys_time<Duration>& st); zoned_time(const string& name, const sys_time<Duration>& st); - zoned_time& operator=(sys_time<Duration> st); - zoned_time& operator=(local_time<Duration> ut); + zoned_time& operator=(const sys_time<Duration>& st); + zoned_time& operator=(const local_time<Duration>& ut); operator sys_time<Duration>() const; explicit operator local_time<Duration>() const; @@ -7628,7 +7711,7 @@ members.
-zoned_time<Duration>::zoned_time(sys_time<Duration> st); +zoned_time<Duration>::zoned_time(const sys_time<Duration>& st);
@@ -7681,7 +7764,7 @@ template <class Duration2>
-zoned_time<Duration>::zoned_time(const time_zone* z, local_time<Duration> tp); +zoned_time<Duration>::zoned_time(const time_zone* z, const local_time<Duration>& tp);
@@ -7697,7 +7780,7 @@ zoned_time<Duration>::zoned_time(const time_zone* z, local_time<Duratio
-zoned_time<Duration>::zoned_time(const string& name, local_time<Duration> tp); +zoned_time<Duration>::zoned_time(const string& name, const local_time<Duration>& tp);
@@ -7706,7 +7789,7 @@ zoned_time<Duration>::zoned_time(const string& name, local_time<Dur
-zoned_time<Duration>::zoned_time(const time_zone* z, local_time<Duration> tp, choose c); +zoned_time<Duration>::zoned_time(const time_zone* z, const local_time<Duration>& tp, choose c);
@@ -7720,7 +7803,7 @@ zoned_time<Duration>::zoned_time(const time_zone* z, local_time<Duratio
-zoned_time<Duration>::zoned_time(const string& name, local_time<Duration> tp, choose c); +zoned_time<Duration>::zoned_time(const string& name, const local_time<Duration>& tp, choose c);
@@ -7803,7 +7886,7 @@ zoned_time<Duration>::zoned_time(const string& name, const sys_time<
-zoned_time<Duration>& zoned_time<Duration>::operator=(sys_time<Duration> st); +zoned_time<Duration>& zoned_time<Duration>::operator=(const sys_time<Duration>& st);
@@ -7816,7 +7899,7 @@ no effect on the return value of
get_time_zone()
.
-zoned_time<Duration>& zoned_time<Duration>::operator=(local_time<Duration> lt); +zoned_time<Duration>& zoned_time<Duration>::operator=(const local_time<Duration>& lt);
@@ -7905,9 +7988,9 @@ operator!=(const zoned_time<Duration1>& x, const zoned_time<Duratio
-template-ostream& -operator<<(ostream& os, const zoned_time & t) +template <class charT, class traits, class Duration> +basic_ostream<charT, traits>& +operator<<(basic_ostream<charT, traits>& os, const zoned_time<Duration>& t)
@@ -7932,7 +8015,7 @@ case the correct return type is
template <class Duration> zoned_time<common_type_t<Duration, seconds>> -make_zoned(sys_time<Duration> tp) +make_zoned(const sys_time<Duration>& tp)@@ -7944,7 +8027,7 @@ make_zoned(sys_time<Duration> tp)
template <class Duration> zoned_time<common_type_t<Duration, seconds>> -make_zoned(const time_zone* zone, local_time<Duration> tp) +make_zoned(const time_zone* zone, const local_time<Duration>& tp)@@ -7955,7 +8038,7 @@ make_zoned(const time_zone* zone, local_time<Duration> tp)
template <class Duration> zoned_time<common_type_t<Duration, seconds>> -make_zoned(const string& name, local_time<Duration> tp) +make_zoned(const string& name, const local_time<Duration>& tp)@@ -7966,7 +8049,7 @@ make_zoned(const string& name, local_time<Duration> tp)
template <class Duration> zoned_time<common_type_t<Duration, seconds>> -make_zoned(const time_zone* zone, local_time<Duration> tp, choose c) +make_zoned(const time_zone* zone, const local_time<Duration>& tp, choose c)@@ -7977,7 +8060,7 @@ make_zoned(const time_zone* zone, local_time<Duration> tp, choose c)
template <class Duration> zoned_time<common_type_t<Duration, seconds>> -make_zoned(const string& name, local_time<Duration> tp, choose c) +make_zoned(const string& name, const local_time<Duration>& tp, choose c)@@ -8459,7 +8542,8 @@ work of these people, this software would have no data to parse. I would also like to thank Jiangang Zhuang and Bjarne Stroustrup for invaluable feedback for the timezone portion of this library, which ended up also influencing the date.h library. Thanks also to Jonathan Wakely for agreeing to -present this paper in Oulu for me. +present this paper in Oulu for me. Thank you Daniel Krügler for the +incredibly thorough review.
And I would also especially like to thank contributors to this library: gmcode,