forked from HowardHinnant/date
Allow heterogeneous zoned_time constructors
taking {string_view, zoned_time}
This commit is contained in:
@@ -393,7 +393,7 @@ throw_invalid(const string_t& s, unsigned i, const string_t& message)
|
|||||||
{
|
{
|
||||||
throw std::runtime_error(std::string("Invalid time_zone initializer.\n") +
|
throw std::runtime_error(std::string("Invalid time_zone initializer.\n") +
|
||||||
std::string(message) + ":\n" +
|
std::string(message) + ":\n" +
|
||||||
s + '\n' +
|
std::string(s) + '\n' +
|
||||||
"\x1b[1;32m" +
|
"\x1b[1;32m" +
|
||||||
std::string(i, '~') + '^' +
|
std::string(i, '~') + '^' +
|
||||||
std::string(s.size()-i-1, '~') +
|
std::string(s.size()-i-1, '~') +
|
||||||
|
@@ -474,9 +474,11 @@ public:
|
|||||||
>::type>
|
>::type>
|
||||||
zoned_time(std::string_view name, const local_time<Duration>& tp, choose c);
|
zoned_time(std::string_view name, const local_time<Duration>& tp, choose c);
|
||||||
|
|
||||||
template <class T = TimeZonePtr,
|
template <class Duration2, class TimeZonePtr2, class T = TimeZonePtr,
|
||||||
class = typename std::enable_if
|
class = typename std::enable_if
|
||||||
<
|
<
|
||||||
|
std::is_convertible<sys_time<Duration2>,
|
||||||
|
sys_time<Duration>>::value &&
|
||||||
std::is_constructible
|
std::is_constructible
|
||||||
<
|
<
|
||||||
zoned_time,
|
zoned_time,
|
||||||
@@ -484,11 +486,13 @@ public:
|
|||||||
zoned_time
|
zoned_time
|
||||||
>::value
|
>::value
|
||||||
>::type>
|
>::type>
|
||||||
zoned_time(std::string_view name, const zoned_time& zt);
|
zoned_time(std::string_view name, const zoned_time<Duration2, TimeZonePtr2>& zt);
|
||||||
|
|
||||||
template <class T = TimeZonePtr,
|
template <class Duration2, class TimeZonePtr2, class T = TimeZonePtr,
|
||||||
class = typename std::enable_if
|
class = typename std::enable_if
|
||||||
<
|
<
|
||||||
|
std::is_convertible<sys_time<Duration2>,
|
||||||
|
sys_time<Duration>>::value &&
|
||||||
std::is_constructible
|
std::is_constructible
|
||||||
<
|
<
|
||||||
zoned_time,
|
zoned_time,
|
||||||
@@ -497,7 +501,7 @@ public:
|
|||||||
choose
|
choose
|
||||||
>::value
|
>::value
|
||||||
>::type>
|
>::type>
|
||||||
zoned_time(std::string_view name, const zoned_time& zt, choose);
|
zoned_time(std::string_view name, const zoned_time<Duration2, TimeZonePtr2>& zt, choose);
|
||||||
|
|
||||||
#else // !HAS_STRING_VIEW
|
#else // !HAS_STRING_VIEW
|
||||||
|
|
||||||
@@ -588,9 +592,11 @@ public:
|
|||||||
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 > 1900)
|
#if !defined(_MSC_VER) || (_MSC_VER > 1900)
|
||||||
template <class T = TimeZonePtr,
|
template <class Duration2, class TimeZonePtr2, class T = TimeZonePtr,
|
||||||
class = typename std::enable_if
|
class = typename std::enable_if
|
||||||
<
|
<
|
||||||
|
std::is_convertible<sys_time<Duration2>,
|
||||||
|
sys_time<Duration>>::value &&
|
||||||
std::is_constructible
|
std::is_constructible
|
||||||
<
|
<
|
||||||
zoned_time,
|
zoned_time,
|
||||||
@@ -598,13 +604,17 @@ public:
|
|||||||
zoned_time
|
zoned_time
|
||||||
>::value
|
>::value
|
||||||
>::type>
|
>::type>
|
||||||
|
#else
|
||||||
|
template <class Duration2, class TimeZonePtr2>
|
||||||
#endif
|
#endif
|
||||||
zoned_time(const std::string& name, const zoned_time& zt);
|
zoned_time(const std::string& name, const zoned_time<Duration2, TimeZonePtr2>& zt);
|
||||||
|
|
||||||
#if !defined(_MSC_VER) || (_MSC_VER > 1900)
|
#if !defined(_MSC_VER) || (_MSC_VER > 1900)
|
||||||
template <class T = TimeZonePtr,
|
template <class Duration2, class TimeZonePtr2, class T = TimeZonePtr,
|
||||||
class = typename std::enable_if
|
class = typename std::enable_if
|
||||||
<
|
<
|
||||||
|
std::is_convertible<sys_time<Duration2>,
|
||||||
|
sys_time<Duration>>::value &&
|
||||||
std::is_constructible
|
std::is_constructible
|
||||||
<
|
<
|
||||||
zoned_time,
|
zoned_time,
|
||||||
@@ -612,13 +622,17 @@ public:
|
|||||||
zoned_time
|
zoned_time
|
||||||
>::value
|
>::value
|
||||||
>::type>
|
>::type>
|
||||||
|
#else
|
||||||
|
template <class Duration2, class TimeZonePtr2>
|
||||||
#endif
|
#endif
|
||||||
zoned_time(const char* name, const zoned_time& zt);
|
zoned_time(const char* name, const zoned_time<Duration2, TimeZonePtr2>& zt);
|
||||||
|
|
||||||
#if !defined(_MSC_VER) || (_MSC_VER > 1900)
|
#if !defined(_MSC_VER) || (_MSC_VER > 1900)
|
||||||
template <class T = TimeZonePtr,
|
template <class Duration2, class TimeZonePtr2, class T = TimeZonePtr,
|
||||||
class = typename std::enable_if
|
class = typename std::enable_if
|
||||||
<
|
<
|
||||||
|
std::is_convertible<sys_time<Duration2>,
|
||||||
|
sys_time<Duration>>::value &&
|
||||||
std::is_constructible
|
std::is_constructible
|
||||||
<
|
<
|
||||||
zoned_time,
|
zoned_time,
|
||||||
@@ -627,13 +641,18 @@ public:
|
|||||||
choose
|
choose
|
||||||
>::value
|
>::value
|
||||||
>::type>
|
>::type>
|
||||||
|
#else
|
||||||
|
template <class Duration2, class TimeZonePtr2>
|
||||||
#endif
|
#endif
|
||||||
zoned_time(const std::string& name, const zoned_time& zt, choose);
|
zoned_time(const std::string& name, const zoned_time<Duration2, TimeZonePtr2>& zt,
|
||||||
|
choose);
|
||||||
|
|
||||||
#if !defined(_MSC_VER) || (_MSC_VER > 1900)
|
#if !defined(_MSC_VER) || (_MSC_VER > 1900)
|
||||||
template <class T = TimeZonePtr,
|
template <class Duration2, class TimeZonePtr2, class T = TimeZonePtr,
|
||||||
class = typename std::enable_if
|
class = typename std::enable_if
|
||||||
<
|
<
|
||||||
|
std::is_convertible<sys_time<Duration2>,
|
||||||
|
sys_time<Duration>>::value &&
|
||||||
std::is_constructible
|
std::is_constructible
|
||||||
<
|
<
|
||||||
zoned_time,
|
zoned_time,
|
||||||
@@ -642,8 +661,11 @@ public:
|
|||||||
choose
|
choose
|
||||||
>::value
|
>::value
|
||||||
>::type>
|
>::type>
|
||||||
|
#else
|
||||||
|
template <class Duration2, class TimeZonePtr2>
|
||||||
#endif
|
#endif
|
||||||
zoned_time(const char* name, const zoned_time& zt, choose);
|
zoned_time(const char* name, const zoned_time<Duration2, TimeZonePtr2>& zt,
|
||||||
|
choose);
|
||||||
|
|
||||||
#endif // !HAS_STRING_VIEW
|
#endif // !HAS_STRING_VIEW
|
||||||
|
|
||||||
@@ -1465,17 +1487,19 @@ zoned_time<Duration, TimeZonePtr>::zoned_time(std::string_view name,
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
template <class Duration, class TimeZonePtr>
|
template <class Duration, class TimeZonePtr>
|
||||||
template <class, class>
|
template <class Duration2, class TimeZonePtr2, class, class>
|
||||||
inline
|
inline
|
||||||
zoned_time<Duration, TimeZonePtr>::zoned_time(std::string_view name, const zoned_time& zt)
|
zoned_time<Duration, TimeZonePtr>::zoned_time(std::string_view name,
|
||||||
|
const zoned_time<Duration2, TimeZonePtr2>& 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>
|
||||||
template <class, class>
|
template <class Duration2, class TimeZonePtr2, class, class>
|
||||||
inline
|
inline
|
||||||
zoned_time<Duration, TimeZonePtr>::zoned_time(std::string_view name,
|
zoned_time<Duration, TimeZonePtr>::zoned_time(std::string_view name,
|
||||||
const zoned_time& zt, choose c)
|
const zoned_time<Duration2, TimeZonePtr2>& zt,
|
||||||
|
choose c)
|
||||||
: zoned_time(zoned_traits<TimeZonePtr>::locate_zone(name), zt, c)
|
: zoned_time(zoned_traits<TimeZonePtr>::locate_zone(name), zt, c)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@@ -1543,40 +1567,51 @@ 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 > 1900)
|
#if !defined(_MSC_VER) || (_MSC_VER > 1900)
|
||||||
template <class T, class>
|
template <class Duration2, class TimeZonePtr2, class, class>
|
||||||
|
#else
|
||||||
|
template <class Duration2, class TimeZonePtr2>
|
||||||
#endif
|
#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<Duration2, TimeZonePtr2>& 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 > 1900)
|
#if !defined(_MSC_VER) || (_MSC_VER > 1900)
|
||||||
template <class T, class>
|
template <class Duration2, class TimeZonePtr2, class, class>
|
||||||
|
#else
|
||||||
|
template <class Duration2, class TimeZonePtr2>
|
||||||
#endif
|
#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<Duration2, TimeZonePtr2>& 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 > 1900)
|
#if !defined(_MSC_VER) || (_MSC_VER > 1900)
|
||||||
template <class T, class>
|
template <class Duration2, class TimeZonePtr2, class, class>
|
||||||
|
#else
|
||||||
|
template <class Duration2, class TimeZonePtr2>
|
||||||
#endif
|
#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<Duration2, TimeZonePtr2>& zt,
|
||||||
|
choose c)
|
||||||
: zoned_time(zoned_traits<TimeZonePtr>::locate_zone(name), zt, c)
|
: zoned_time(zoned_traits<TimeZonePtr>::locate_zone(name), zt, c)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
template <class Duration, class TimeZonePtr>
|
template <class Duration, class TimeZonePtr>
|
||||||
#if !defined(_MSC_VER) || (_MSC_VER > 1900)
|
#if !defined(_MSC_VER) || (_MSC_VER > 1900)
|
||||||
template <class T, class>
|
template <class Duration2, class TimeZonePtr2, class, class>
|
||||||
|
#else
|
||||||
|
template <class Duration2, class TimeZonePtr2>
|
||||||
#endif
|
#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<Duration2, TimeZonePtr2>& zt,
|
||||||
|
choose c)
|
||||||
: zoned_time(zoned_traits<TimeZonePtr>::locate_zone(name), zt, c)
|
: zoned_time(zoned_traits<TimeZonePtr>::locate_zone(name), zt, c)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user