Add fixes for VS-2017.

This commit is contained in:
Howard Hinnant
2017-08-18 22:55:31 -04:00
parent 2515dfd1b5
commit 38c24b4090

85
tz.h
View File

@@ -359,11 +359,16 @@ private:
sys_time<duration> tp_; sys_time<duration> tp_;
public: public:
#if !defined(_MSC_VER) || (_MSC_VER > 1911)
template <class T = TimeZonePtr, template <class T = TimeZonePtr,
class = decltype(zoned_traits<T>::default_zone())> class = decltype(zoned_traits<T>::default_zone())>
#endif
zoned_time(); zoned_time();
#if !defined(_MSC_VER) || (_MSC_VER > 1911)
template <class T = TimeZonePtr, template <class T = TimeZonePtr,
class = decltype(zoned_traits<T>::default_zone())> class = decltype(zoned_traits<T>::default_zone())>
#endif
zoned_time(const sys_time<Duration>& st); zoned_time(const sys_time<Duration>& st);
explicit zoned_time(TimeZonePtr z); explicit zoned_time(TimeZonePtr z);
@@ -379,6 +384,7 @@ public:
>::type> >::type>
explicit zoned_time(std::string_view name); explicit zoned_time(std::string_view name);
#else #else
#if !defined(_MSC_VER) || (_MSC_VER > 1911)
template <class T = TimeZonePtr, template <class T = TimeZonePtr,
class = typename std::enable_if class = typename std::enable_if
< <
@@ -388,6 +394,7 @@ public:
decltype(zoned_traits<T>::locate_zone(std::string())) decltype(zoned_traits<T>::locate_zone(std::string()))
>::value >::value
>::type> >::type>
#endif
explicit zoned_time(const std::string& name); explicit zoned_time(const std::string& name);
#endif #endif
@@ -493,6 +500,7 @@ public:
#else // !HAS_STRING_VIEW #else // !HAS_STRING_VIEW
#if !defined(_MSC_VER) || (_MSC_VER > 1911)
template <class T = TimeZonePtr, template <class T = TimeZonePtr,
class = typename std::enable_if class = typename std::enable_if
< <
@@ -503,8 +511,10 @@ public:
sys_time<Duration> sys_time<Duration>
>::value >::value
>::type> >::type>
#endif
zoned_time(const std::string& name, const sys_time<Duration>& st); zoned_time(const std::string& name, const sys_time<Duration>& st);
#if !defined(_MSC_VER) || (_MSC_VER > 1911)
template <class T = TimeZonePtr, template <class T = TimeZonePtr,
class = typename std::enable_if class = typename std::enable_if
< <
@@ -515,8 +525,10 @@ public:
sys_time<Duration> sys_time<Duration>
>::value >::value
>::type> >::type>
#endif
zoned_time(const char* name, const sys_time<Duration>& st); zoned_time(const char* name, const sys_time<Duration>& st);
#if !defined(_MSC_VER) || (_MSC_VER > 1911)
template <class T = TimeZonePtr, template <class T = TimeZonePtr,
class = typename std::enable_if class = typename std::enable_if
< <
@@ -527,8 +539,10 @@ public:
local_time<Duration> local_time<Duration>
>::value >::value
>::type> >::type>
#endif
zoned_time(const std::string& name, const local_time<Duration>& tp); zoned_time(const std::string& name, const local_time<Duration>& tp);
#if !defined(_MSC_VER) || (_MSC_VER > 1911)
template <class T = TimeZonePtr, template <class T = TimeZonePtr,
class = typename std::enable_if class = typename std::enable_if
< <
@@ -539,8 +553,10 @@ public:
local_time<Duration> local_time<Duration>
>::value >::value
>::type> >::type>
#endif
zoned_time(const char* name, const local_time<Duration>& tp); zoned_time(const char* name, const local_time<Duration>& tp);
#if !defined(_MSC_VER) || (_MSC_VER > 1911)
template <class T = TimeZonePtr, template <class T = TimeZonePtr,
class = typename std::enable_if class = typename std::enable_if
< <
@@ -552,8 +568,10 @@ public:
choose choose
>::value >::value
>::type> >::type>
#endif
zoned_time(const std::string& name, const local_time<Duration>& tp, choose c); zoned_time(const std::string& name, const local_time<Duration>& tp, choose c);
#if !defined(_MSC_VER) || (_MSC_VER > 1911)
template <class T = TimeZonePtr, template <class T = TimeZonePtr,
class = typename std::enable_if class = typename std::enable_if
< <
@@ -565,8 +583,10 @@ public:
choose choose
>::value >::value
>::type> >::type>
#endif
zoned_time(const char* name, const local_time<Duration>& tp, choose c); zoned_time(const char* name, const local_time<Duration>& tp, choose c);
#if !defined(_MSC_VER) || (_MSC_VER > 1911)
template <class T = TimeZonePtr, template <class T = TimeZonePtr,
class = typename std::enable_if class = typename std::enable_if
< <
@@ -577,8 +597,10 @@ public:
zoned_time zoned_time
>::value >::value
>::type> >::type>
#endif
zoned_time(const std::string& name, const zoned_time& zt); zoned_time(const std::string& name, const zoned_time& zt);
#if !defined(_MSC_VER) || (_MSC_VER > 1911)
template <class T = TimeZonePtr, template <class T = TimeZonePtr,
class = typename std::enable_if class = typename std::enable_if
< <
@@ -589,8 +611,10 @@ public:
zoned_time zoned_time
>::value >::value
>::type> >::type>
#endif
zoned_time(const char* name, const zoned_time& zt); zoned_time(const char* name, const zoned_time& zt);
#if !defined(_MSC_VER) || (_MSC_VER > 1911)
template <class T = TimeZonePtr, template <class T = TimeZonePtr,
class = typename std::enable_if class = typename std::enable_if
< <
@@ -602,8 +626,10 @@ public:
choose choose
>::value >::value
>::type> >::type>
#endif
zoned_time(const std::string& name, const zoned_time& zt, choose); zoned_time(const std::string& name, const zoned_time& zt, choose);
#if !defined(_MSC_VER) || (_MSC_VER > 1911)
template <class T = TimeZonePtr, template <class T = TimeZonePtr,
class = typename std::enable_if class = typename std::enable_if
< <
@@ -615,6 +641,7 @@ public:
choose choose
>::value >::value
>::type> >::type>
#endif
zoned_time(const char* name, const zoned_time& zt, choose); zoned_time(const char* name, const zoned_time& zt, choose);
#endif // !HAS_STRING_VIEW #endif // !HAS_STRING_VIEW
@@ -1314,14 +1341,18 @@ to_raw_pointer(Pointer p) noexcept
} // namespace detail } // namespace detail
template <class Duration, class TimeZonePtr> template <class Duration, class TimeZonePtr>
#if !defined(_MSC_VER) || (_MSC_VER > 1911)
template <class, class> template <class, class>
#endif
inline inline
zoned_time<Duration, TimeZonePtr>::zoned_time() zoned_time<Duration, TimeZonePtr>::zoned_time()
: zone_(zoned_traits<TimeZonePtr>::default_zone()) : zone_(zoned_traits<TimeZonePtr>::default_zone())
{} {}
template <class Duration, class TimeZonePtr> template <class Duration, class TimeZonePtr>
#if !defined(_MSC_VER) || (_MSC_VER > 1911)
template <class, class> template <class, class>
#endif
inline inline
zoned_time<Duration, TimeZonePtr>::zoned_time(const sys_time<Duration>& st) zoned_time<Duration, TimeZonePtr>::zoned_time(const sys_time<Duration>& st)
: zone_(zoned_traits<TimeZonePtr>::default_zone()) : zone_(zoned_traits<TimeZonePtr>::default_zone())
@@ -1346,7 +1377,9 @@ zoned_time<Duration, TimeZonePtr>::zoned_time(std::string_view name)
#else // !HAS_STRING_VIEW #else // !HAS_STRING_VIEW
template <class Duration, class TimeZonePtr> template <class Duration, class TimeZonePtr>
#if !defined(_MSC_VER) || (_MSC_VER > 1911)
template <class, class> template <class, class>
#endif
inline inline
zoned_time<Duration, TimeZonePtr>::zoned_time(const std::string& name) zoned_time<Duration, TimeZonePtr>::zoned_time(const std::string& name)
: zoned_time(zoned_traits<TimeZonePtr>::locate_zone(name)) : zoned_time(zoned_traits<TimeZonePtr>::locate_zone(name))
@@ -1445,7 +1478,9 @@ zoned_time<Duration, TimeZonePtr>::zoned_time(std::string_view name,
#else // !HAS_STRING_VIEW #else // !HAS_STRING_VIEW
template <class Duration, class TimeZonePtr> template <class Duration, class TimeZonePtr>
#if !defined(_MSC_VER) || (_MSC_VER > 1911)
template <class, class> template <class, class>
#endif
inline inline
zoned_time<Duration, TimeZonePtr>::zoned_time(const std::string& name, zoned_time<Duration, TimeZonePtr>::zoned_time(const std::string& name,
const sys_time<Duration>& st) const sys_time<Duration>& st)
@@ -1453,7 +1488,9 @@ zoned_time<Duration, TimeZonePtr>::zoned_time(const std::string& name,
{} {}
template <class Duration, class TimeZonePtr> template <class Duration, class TimeZonePtr>
#if !defined(_MSC_VER) || (_MSC_VER > 1911)
template <class, class> template <class, class>
#endif
inline inline
zoned_time<Duration, TimeZonePtr>::zoned_time(const char* name, zoned_time<Duration, TimeZonePtr>::zoned_time(const char* name,
const sys_time<Duration>& st) const sys_time<Duration>& st)
@@ -1461,7 +1498,9 @@ zoned_time<Duration, TimeZonePtr>::zoned_time(const char* name,
{} {}
template <class Duration, class TimeZonePtr> template <class Duration, class TimeZonePtr>
#if !defined(_MSC_VER) || (_MSC_VER > 1911)
template <class, class> template <class, class>
#endif
inline inline
zoned_time<Duration, TimeZonePtr>::zoned_time(const std::string& name, zoned_time<Duration, TimeZonePtr>::zoned_time(const std::string& name,
const local_time<Duration>& t) const local_time<Duration>& t)
@@ -1469,7 +1508,9 @@ zoned_time<Duration, TimeZonePtr>::zoned_time(const std::string& name,
{} {}
template <class Duration, class TimeZonePtr> template <class Duration, class TimeZonePtr>
#if !defined(_MSC_VER) || (_MSC_VER > 1911)
template <class, class> template <class, class>
#endif
inline inline
zoned_time<Duration, TimeZonePtr>::zoned_time(const char* name, zoned_time<Duration, TimeZonePtr>::zoned_time(const char* name,
const local_time<Duration>& t) const local_time<Duration>& t)
@@ -1477,7 +1518,9 @@ zoned_time<Duration, TimeZonePtr>::zoned_time(const char* name,
{} {}
template <class Duration, class TimeZonePtr> template <class Duration, class TimeZonePtr>
#if !defined(_MSC_VER) || (_MSC_VER > 1911)
template <class, class> template <class, class>
#endif
inline inline
zoned_time<Duration, TimeZonePtr>::zoned_time(const std::string& name, zoned_time<Duration, TimeZonePtr>::zoned_time(const std::string& name,
const local_time<Duration>& t, choose c) const local_time<Duration>& t, choose c)
@@ -1485,7 +1528,9 @@ zoned_time<Duration, TimeZonePtr>::zoned_time(const std::string& name,
{} {}
template <class Duration, class TimeZonePtr> template <class Duration, class TimeZonePtr>
#if !defined(_MSC_VER) || (_MSC_VER > 1911)
template <class, class> template <class, class>
#endif
inline inline
zoned_time<Duration, TimeZonePtr>::zoned_time(const char* name, zoned_time<Duration, TimeZonePtr>::zoned_time(const char* name,
const local_time<Duration>& t, choose c) const local_time<Duration>& t, choose c)
@@ -1493,7 +1538,9 @@ zoned_time<Duration, TimeZonePtr>::zoned_time(const char* name,
{} {}
template <class Duration, class TimeZonePtr> template <class Duration, class TimeZonePtr>
#if !defined(_MSC_VER) || (_MSC_VER > 1911)
template <class, class> template <class, class>
#endif
inline inline
zoned_time<Duration, TimeZonePtr>::zoned_time(const std::string& name, zoned_time<Duration, TimeZonePtr>::zoned_time(const std::string& name,
const zoned_time& zt) const zoned_time& zt)
@@ -1501,14 +1548,18 @@ zoned_time<Duration, TimeZonePtr>::zoned_time(const std::string& name,
{} {}
template <class Duration, class TimeZonePtr> template <class Duration, class TimeZonePtr>
#if !defined(_MSC_VER) || (_MSC_VER > 1911)
template <class, class> template <class, class>
#endif
inline inline
zoned_time<Duration, TimeZonePtr>::zoned_time(const char* name, const zoned_time& zt) zoned_time<Duration, TimeZonePtr>::zoned_time(const char* name, const zoned_time& zt)
: zoned_time(zoned_traits<TimeZonePtr>::locate_zone(name), zt) : zoned_time(zoned_traits<TimeZonePtr>::locate_zone(name), zt)
{} {}
template <class Duration, class TimeZonePtr> template <class Duration, class TimeZonePtr>
#if !defined(_MSC_VER) || (_MSC_VER > 1911)
template <class, class> template <class, class>
#endif
inline inline
zoned_time<Duration, TimeZonePtr>::zoned_time(const std::string& name, zoned_time<Duration, TimeZonePtr>::zoned_time(const std::string& name,
const zoned_time& zt, choose c) const zoned_time& zt, choose c)
@@ -1516,7 +1567,9 @@ zoned_time<Duration, TimeZonePtr>::zoned_time(const std::string& name,
{} {}
template <class Duration, class TimeZonePtr> template <class Duration, class TimeZonePtr>
#if !defined(_MSC_VER) || (_MSC_VER > 1911)
template <class, class> template <class, class>
#endif
inline inline
zoned_time<Duration, TimeZonePtr>::zoned_time(const char* name, zoned_time<Duration, TimeZonePtr>::zoned_time(const char* name,
const zoned_time& zt, choose c) const zoned_time& zt, choose c)
@@ -1545,14 +1598,14 @@ zoned_time<Duration, TimeZonePtr>::operator=(const local_time<Duration>& ut)
template <class Duration, class TimeZonePtr> template <class Duration, class TimeZonePtr>
inline inline
zoned_time<Duration, TimeZonePtr>::operator local_time<zoned_time::duration>() const zoned_time<Duration, TimeZonePtr>::operator local_time<typename zoned_time<Duration, TimeZonePtr>::duration>() const
{ {
return get_local_time(); return get_local_time();
} }
template <class Duration, class TimeZonePtr> template <class Duration, class TimeZonePtr>
inline inline
zoned_time<Duration, TimeZonePtr>::operator sys_time<zoned_time::duration>() const zoned_time<Duration, TimeZonePtr>::operator sys_time<typename zoned_time<Duration, TimeZonePtr>::duration>() const
{ {
return get_sys_time(); return get_sys_time();
} }
@@ -1595,7 +1648,7 @@ inline
zoned_time<std::chrono::seconds> zoned_time<std::chrono::seconds>
make_zoned() make_zoned()
{ {
return {}; return zoned_time<std::chrono::seconds>();
} }
template <class Duration> template <class Duration>
@@ -1603,7 +1656,7 @@ inline
zoned_time<typename std::common_type<Duration, std::chrono::seconds>::type> zoned_time<typename std::common_type<Duration, std::chrono::seconds>::type>
make_zoned(const sys_time<Duration>& tp) make_zoned(const sys_time<Duration>& tp)
{ {
return {tp}; return (tp);
} }
template <class TimeZonePtr, template <class TimeZonePtr,
@@ -1622,14 +1675,14 @@ inline
zoned_time<std::chrono::seconds, TimeZonePtr> zoned_time<std::chrono::seconds, TimeZonePtr>
make_zoned(TimeZonePtr z) make_zoned(TimeZonePtr z)
{ {
return zoned_time<std::chrono::seconds, TimeZonePtr>{std::move(z)}; return zoned_time<std::chrono::seconds, TimeZonePtr>(std::move(z));
} }
inline inline
zoned_seconds zoned_seconds
make_zoned(const std::string& name) make_zoned(const std::string& name)
{ {
return zoned_seconds{name}; return zoned_seconds(name);
} }
template <class Duration, class TimeZonePtr, template <class Duration, class TimeZonePtr,
@@ -1642,7 +1695,7 @@ inline
zoned_time<typename std::common_type<Duration, std::chrono::seconds>::type, TimeZonePtr> zoned_time<typename std::common_type<Duration, std::chrono::seconds>::type, TimeZonePtr>
make_zoned(TimeZonePtr zone, const local_time<Duration>& tp) make_zoned(TimeZonePtr zone, const local_time<Duration>& tp)
{ {
return {std::move(zone), tp}; return (std::move(zone), tp);
} }
template <class Duration, class TimeZonePtr, template <class Duration, class TimeZonePtr,
@@ -1655,7 +1708,7 @@ inline
zoned_time<typename std::common_type<Duration, std::chrono::seconds>::type, TimeZonePtr> zoned_time<typename std::common_type<Duration, std::chrono::seconds>::type, TimeZonePtr>
make_zoned(TimeZonePtr zone, const local_time<Duration>& tp, choose c) make_zoned(TimeZonePtr zone, const local_time<Duration>& tp, choose c)
{ {
return {std::move(zone), tp, c}; return (std::move(zone), tp, c);
} }
template <class Duration> template <class Duration>
@@ -1663,7 +1716,7 @@ inline
zoned_time<typename std::common_type<Duration, std::chrono::seconds>::type> zoned_time<typename std::common_type<Duration, std::chrono::seconds>::type>
make_zoned(const std::string& name, const local_time<Duration>& tp) make_zoned(const std::string& name, const local_time<Duration>& tp)
{ {
return {name, tp}; return (name, tp);
} }
template <class Duration> template <class Duration>
@@ -1671,7 +1724,7 @@ inline
zoned_time<typename std::common_type<Duration, std::chrono::seconds>::type> zoned_time<typename std::common_type<Duration, std::chrono::seconds>::type>
make_zoned(const std::string& name, const local_time<Duration>& tp, choose c) make_zoned(const std::string& name, const local_time<Duration>& tp, choose c)
{ {
return {name, tp, c}; return (name, tp, c);
} }
template <class Duration, class TimeZonePtr> template <class Duration, class TimeZonePtr>
@@ -1679,7 +1732,7 @@ inline
zoned_time<Duration, TimeZonePtr> zoned_time<Duration, TimeZonePtr>
make_zoned(TimeZonePtr zone, const zoned_time<Duration, TimeZonePtr>& zt) make_zoned(TimeZonePtr zone, const zoned_time<Duration, TimeZonePtr>& zt)
{ {
return {std::move(zone), zt}; return (std::move(zone), zt);
} }
template <class Duration, class TimeZonePtr> template <class Duration, class TimeZonePtr>
@@ -1687,7 +1740,7 @@ inline
zoned_time<Duration, TimeZonePtr> zoned_time<Duration, TimeZonePtr>
make_zoned(const std::string& name, const zoned_time<Duration, TimeZonePtr>& zt) make_zoned(const std::string& name, const zoned_time<Duration, TimeZonePtr>& zt)
{ {
return {name, zt}; return (name, zt);
} }
template <class Duration, class TimeZonePtr> template <class Duration, class TimeZonePtr>
@@ -1695,7 +1748,7 @@ inline
zoned_time<Duration, TimeZonePtr> zoned_time<Duration, TimeZonePtr>
make_zoned(TimeZonePtr zone, const zoned_time<Duration, TimeZonePtr>& zt, choose c) make_zoned(TimeZonePtr zone, const zoned_time<Duration, TimeZonePtr>& zt, choose c)
{ {
return {std::move(zone), zt, c}; return (std::move(zone), zt, c);
} }
template <class Duration, class TimeZonePtr> template <class Duration, class TimeZonePtr>
@@ -1703,7 +1756,7 @@ inline
zoned_time<Duration, TimeZonePtr> zoned_time<Duration, TimeZonePtr>
make_zoned(const std::string& name, const zoned_time<Duration, TimeZonePtr>& zt, choose c) make_zoned(const std::string& name, const zoned_time<Duration, TimeZonePtr>& zt, choose c)
{ {
return {name, zt, c}; return (name, zt, c);
} }
template <class Duration, class TimeZonePtr, template <class Duration, class TimeZonePtr,
@@ -1716,7 +1769,7 @@ inline
zoned_time<typename std::common_type<Duration, std::chrono::seconds>::type, TimeZonePtr> zoned_time<typename std::common_type<Duration, std::chrono::seconds>::type, TimeZonePtr>
make_zoned(TimeZonePtr zone, const sys_time<Duration>& st) make_zoned(TimeZonePtr zone, const sys_time<Duration>& st)
{ {
return {std::move(zone), st}; return (std::move(zone), st);
} }
template <class Duration> template <class Duration>
@@ -1724,7 +1777,7 @@ inline
zoned_time<typename std::common_type<Duration, std::chrono::seconds>::type> zoned_time<typename std::common_type<Duration, std::chrono::seconds>::type>
make_zoned(const std::string& name, const sys_time<Duration>& st) make_zoned(const std::string& name, const sys_time<Duration>& st)
{ {
return {name, st}; return (name, st);
} }
template <class CharT, class Traits, class Duration, class TimeZonePtr> template <class CharT, class Traits, class Duration, class TimeZonePtr>