From 5c09ae73f2e9520588938fc705cd33471a8dd3f4 Mon Sep 17 00:00:00 2001 From: Howard Hinnant Date: Wed, 8 Feb 2017 11:32:33 -0500 Subject: [PATCH] Work around {} bug for older compilers --- date.h | 22 +++++++++++----------- tz.cpp | 2 +- tz.h | 16 ++++++++-------- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/date.h b/date.h index d45c007..ea08a6f 100644 --- a/date.h +++ b/date.h @@ -4608,7 +4608,7 @@ to_stream(std::basic_ostream& os, const CharT* fmt, { auto ld = floor(tp); auto y = year_month_day{ld + days{3}}.year(); - auto start = local_days{(y - years{1})/date::dec/thu[last]} + (mon-thu); + auto start = local_days((y - years{1})/date::dec/thu[last]) + (mon-thu); if (ld < start) --y; if (*fmt == CharT{'G'}) @@ -4639,7 +4639,7 @@ to_stream(std::basic_ostream& os, const CharT* fmt, { auto ld = floor(tp); auto y = year_month_day{ld}.year(); - auto doy = ld - local_days{y/jan/1} + days{1}; + auto doy = ld - local_days(y/jan/1) + days{1}; detail::save_stream _(os); os.fill('0'); os.flags(std::ios::dec | std::ios::right); @@ -4739,7 +4739,7 @@ to_stream(std::basic_ostream& os, const CharT* fmt, } else if (modified == CharT{}) { - auto st = local_days{sun[1]/jan/ymd.year()}; + auto st = local_days(sun[1]/jan/ymd.year()); if (ld < st) os << CharT{'0'} << CharT{'0'}; else @@ -4777,11 +4777,11 @@ to_stream(std::basic_ostream& os, const CharT* fmt, else if (modified == CharT{}) { auto y = year_month_day{ld + days{3}}.year(); - auto st = local_days{(y - years{1})/12/thu[last]} + (mon-thu); + auto st = local_days((y - years{1})/12/thu[last]) + (mon-thu); if (ld < st) { --y; - st = local_days{(y - years{1})/12/thu[last]} + (mon-thu); + st = local_days((y - years{1})/12/thu[last]) + (mon-thu); } auto wn = duration_cast(ld - st).count() + 1; if (wn < 10) @@ -4839,7 +4839,7 @@ to_stream(std::basic_ostream& os, const CharT* fmt, } else if (modified == CharT{}) { - auto st = local_days{mon[1]/jan/ymd.year()}; + auto st = local_days(mon[1]/jan/ymd.year()); if (ld < st) os << CharT{'0'} << CharT{'0'}; else @@ -6482,7 +6482,7 @@ parse(std::basic_istream& is, { if (V == not_a_week_num || wd == not_a_weekday) goto broken; - auto ymd = year_month_day{local_days{year{G-1}/dec/thu[last]} + + auto ymd = year_month_day{local_days(year{G-1}/dec/thu[last]) + (mon-thu) + weeks{V-1} + (weekday{static_cast(wd)}-mon)}; if (Y == not_a_year) @@ -6505,7 +6505,7 @@ parse(std::basic_istream& is, goto broken; if (j != 0) { - auto ymd = year_month_day{local_days{year{Y}/1/1} + days{j-1}}; + auto ymd = year_month_day{local_days(year{Y}/1/1) + days{j-1}}; if (m == 0) m = static_cast(static_cast(ymd.month())); else if (month(m) != ymd.month()) @@ -6523,7 +6523,7 @@ parse(std::basic_istream& is, if (U == 0) sd = year{Y-1}/dec/weekday{static_cast(wd)}[last]; else - sd = sys_days{year{Y}/jan/sun[1]} + weeks{U-1} + + sd = sys_days(year{Y}/jan/sun[1]) + weeks{U-1} + (weekday{static_cast(wd)} - sun); year_month_day ymd = sd; if (year{Y} != ymd.year()) @@ -6545,7 +6545,7 @@ parse(std::basic_istream& is, if (W == 0) sd = year{Y-1}/dec/weekday{static_cast(wd)}[last]; else - sd = sys_days{year{Y}/jan/mon[1]} + weeks{W-1} + + sd = sys_days(year{Y}/jan/mon[1]) + weeks{W-1} + (weekday{static_cast(wd)} - mon); year_month_day ymd = sd; if (year{Y} != ymd.year()) @@ -6564,7 +6564,7 @@ parse(std::basic_istream& is, auto ymd = year{Y}/m/d; if (!ymd.ok()) goto broken; - auto ld = local_days{ymd}; + auto ld = local_days(ymd); if (wd != not_a_weekday && weekday{static_cast(wd)} != weekday{ld}) goto broken; diff --git a/tz.cpp b/tz.cpp index 29486d9..3f7ac2c 100644 --- a/tz.cpp +++ b/tz.cpp @@ -997,7 +997,7 @@ detail::MonthDayTime::canonicalize(date::year y) return; case month_last_dow: { - auto const ymd = year_month_day(sys_days{y/u.month_weekday_last_}); + auto const ymd = year_month_day(sys_days(y/u.month_weekday_last_)); u.month_day_ = ymd.month()/ymd.day(); type_ = month_day; return; diff --git a/tz.h b/tz.h index 3585874..84c0cb8 100644 --- a/tz.h +++ b/tz.h @@ -1162,7 +1162,7 @@ to_utc_time(const tai_time& t) NOEXCEPT using namespace std::chrono; using duration = typename std::common_type::type; return utc_time{t.time_since_epoch()} - - (sys_days{year{1970}/jan/1} - sys_days{year{1958}/jan/1} + seconds{10}); + (sys_days(year{1970}/jan/1) - sys_days(year{1958}/jan/1) + seconds{10}); } template @@ -1173,7 +1173,7 @@ to_tai_time(const utc_time& t) NOEXCEPT using namespace std::chrono; using duration = typename std::common_type::type; return tai_time{t.time_since_epoch()} + - (sys_days{year{1970}/jan/1} - sys_days{year{1958}/jan/1} + seconds{10}); + (sys_days(year{1970}/jan/1) - sys_days(year{1958}/jan/1) + seconds{10}); } template @@ -1199,7 +1199,7 @@ operator<<(std::basic_ostream& os, const tai_time& t) using namespace std::chrono; using duration = typename std::common_type::type; auto tp = sys_time{t.time_since_epoch()} - - (sys_days{year{1970}/jan/1} - sys_days{year{1958}/jan/1}); + (sys_days(year{1970}/jan/1) - sys_days(year{1958}/jan/1)); return os << tp; } @@ -1230,7 +1230,7 @@ to_utc_time(const gps_time& t) NOEXCEPT using namespace std::chrono; using duration = typename std::common_type::type; return utc_time{t.time_since_epoch()} + - (sys_days{year{1980}/jan/sun[1]} - sys_days{year{1970}/jan/1} + seconds{9}); + (sys_days(year{1980}/jan/sun[1]) - sys_days(year{1970}/jan/1) + seconds{9}); } template @@ -1241,7 +1241,7 @@ to_gps_time(const utc_time& t) using namespace std::chrono; using duration = typename std::common_type::type; return gps_time{t.time_since_epoch()} - - (sys_days{year{1980}/jan/sun[1]} - sys_days{year{1970}/jan/1} + seconds{9}); + (sys_days(year{1980}/jan/sun[1]) - sys_days(year{1970}/jan/1) + seconds{9}); } template @@ -1267,7 +1267,7 @@ operator<<(std::basic_ostream& os, const gps_time& t) using namespace std::chrono; using duration = typename std::common_type::type; auto tp = sys_time{t.time_since_epoch()} + - (sys_days{year{1980}/jan/sun[1]} - sys_days{year{1970}/jan/1}); + (sys_days(year{1980}/jan/sun[1]) - sys_days(year{1970}/jan/1)); return os << tp; } @@ -1295,7 +1295,7 @@ to_tai_time(const gps_time& t) NOEXCEPT using namespace std::chrono; using duration = typename std::common_type::type; return tai_time{t.time_since_epoch()} + - (sys_days{year{1980}/jan/sun[1]} - sys_days{year{1958}/jan/1} + seconds{19}); + (sys_days(year{1980}/jan/sun[1]) - sys_days(year{1958}/jan/1) + seconds{19}); } template @@ -1306,7 +1306,7 @@ to_gps_time(const tai_time& t) NOEXCEPT using namespace std::chrono; using duration = typename std::common_type::type; return gps_time{t.time_since_epoch()} - - (sys_days{year{1980}/jan/sun[1]} - sys_days{year{1958}/jan/1} + seconds{19}); + (sys_days(year{1980}/jan/sun[1]) - sys_days(year{1958}/jan/1) + seconds{19}); } // format