From 88c661e9f3ae4f1d989e12a67523d02721c813a1 Mon Sep 17 00:00:00 2001 From: Howard Hinnant Date: Mon, 23 Apr 2018 20:30:58 -0400 Subject: [PATCH] Fix zoned_time deduction guides --- include/date/tz.h | 87 ++++++++++++++++++++--------------------------- 1 file changed, 37 insertions(+), 50 deletions(-) diff --git a/include/date/tz.h b/include/date/tz.h index 686fdbf..ae2a08c 100644 --- a/include/date/tz.h +++ b/include/date/tz.h @@ -707,57 +707,45 @@ template zoned_time(sys_time) -> zoned_time>; -template -zoned_time(TimeZonePtr) - -> zoned_time; +template +zoned_time(TimeZonePtrOrName) + -> zoned_time::value, + time_zone const*, + TimeZonePtrOrName + >>; -template -zoned_time(TimeZonePtr, sys_time) - -> zoned_time, TimeZonePtr>; +template +zoned_time(TimeZonePtrOrName, sys_time) + -> zoned_time, + std::conditional_t + < + std::is_convertible::value, + time_zone const*, + TimeZonePtrOrName + >>; -template -zoned_time(TimeZonePtr, local_time, choose = choose::earliest) - -> zoned_time, TimeZonePtr>; +template +zoned_time(TimeZonePtrOrName, local_time, choose = choose::earliest) + -> zoned_time, + std::conditional_t + < + std::is_convertible::value, + time_zone const*, + TimeZonePtrOrName + >>; -#if HAS_STRING_VIEW - -zoned_time(std::string_view) - -> zoned_time; - -template -zoned_time(std::string_view, sys_time) - -> zoned_time>; - -template -zoned_time(std::string_view, local_time, choose = choose::earliest) - -> zoned_time>; - -#else // !HAS_STRING_VIEW - -zoned_time(std::string) - -> zoned_time; - -template -zoned_time(std::string, sys_time) - -> zoned_time>; - -template -zoned_time(std::string, local_time, choose = choose::earliest) - -> zoned_time>; - -#endif // !HAS_STRING_VIEW - -template -zoned_time(const char*, sys_time) - -> zoned_time>; - -template -zoned_time(const char*, local_time, choose = choose::earliest) - -> zoned_time>; - -template -zoned_time(TimeZonePtr, zoned_time, choose = choose::earliest) - -> zoned_time; +template +zoned_time(TimeZonePtrOrName, zoned_time, choose = choose::earliest) + -> zoned_time, + std::conditional_t + < + std::is_convertible::value, + time_zone const*, + TimeZonePtrOrName + >>; #endif // HAS_DEDUCTION_GUIDES @@ -1840,9 +1828,8 @@ to_stream(std::basic_ostream& os, const CharT* fmt, { using duration = typename zoned_time::duration; using LT = local_time; - auto const tz = tp.get_time_zone(); auto const st = tp.get_sys_time(); - auto const info = tz->get_info(st); + auto const info = tp.get_time_zone()->get_info(st); return to_stream(os, fmt, LT{(st+info.offset).time_since_epoch()}, &info.abbrev, &info.offset); }