Mismatch in return type of converting function is now hard error.
Change the implementation, in the way that mismatch in return type of the from/to_sys/utc functions (not returning time_point, or returning time_point with inappropriate clock) leads to hard error. Added appropariate fail test for to_sys function, including: * returning an int * returning time_point of wrong clock * reutrning reference to time_point
This commit is contained in:
1 parent
5a9b44a37a
commit
58a4a9518a
4 files changed
+159
-10
No files matched your search
+10
-10
@@ -2259,14 +2259,14 @@ struct clock_time_conversion<Clock, Clock>
|
||||
namespace ctc_detail
|
||||
{
|
||||
//Check if TimePoint is time for given clock,
|
||||
//if so exposes it as type typedef
|
||||
//if not emits hard errorf
|
||||
template<typename Clock, typename TimePoint>
|
||||
struct return_clock_time
|
||||
: std::enable_if<
|
||||
std::is_same<Clock, typename TimePoint::clock>::value,
|
||||
TimePoint
|
||||
>
|
||||
{};
|
||||
{
|
||||
using clock_time_point = std::chrono::time_point<Clock, typename TimePoint::duration>;
|
||||
static_assert(std::is_same<TimePoint, clock_time_point>::value, "time point with appropariate clock shall be returned");
|
||||
using type = TimePoint;
|
||||
};
|
||||
|
||||
// Check if Clock has to_sys method accepting TimePoint with given duration const& and returning sys_time
|
||||
// If so has nested type member equal to return type to_sys.
|
||||
@@ -2276,7 +2276,7 @@ namespace ctc_detail
|
||||
|
||||
template<typename Clock, typename Duration>
|
||||
struct return_to_sys<Clock, Duration, decltype(Clock::to_sys(std::declval<std::chrono::time_point<Clock, Duration> const&>()), void())>
|
||||
: return_clock_time<std::chrono::system_clock, typename std::decay<decltype(Clock::to_sys(std::declval<std::chrono::time_point<Clock, Duration> const&>()))>::type>
|
||||
: return_clock_time<std::chrono::system_clock, decltype(Clock::to_sys(std::declval<std::chrono::time_point<Clock, Duration> const&>()))>
|
||||
{};
|
||||
|
||||
// Similiar to above
|
||||
@@ -2286,7 +2286,7 @@ namespace ctc_detail
|
||||
|
||||
template<typename Clock, typename Duration>
|
||||
struct return_from_sys<Clock, Duration, decltype(Clock::from_sys(std::declval<std::chrono::time_point<std::chrono::system_clock, Duration> const&>()), void())>
|
||||
: return_clock_time<Clock, typename std::decay<decltype(Clock::from_sys(std::declval<std::chrono::time_point<std::chrono::system_clock, Duration> const&>()))>::type>
|
||||
: return_clock_time<Clock, decltype(Clock::from_sys(std::declval<std::chrono::time_point<std::chrono::system_clock, Duration> const&>()))>
|
||||
{};
|
||||
|
||||
// Similiar to above
|
||||
@@ -2296,7 +2296,7 @@ namespace ctc_detail
|
||||
|
||||
template<typename Clock, typename Duration>
|
||||
struct return_to_utc<Clock, Duration, decltype(Clock::to_utc(std::declval<std::chrono::time_point<Clock, Duration> const&>()), void())>
|
||||
: return_clock_time<utc_clock, typename std::decay<decltype(Clock::to_utc(std::declval<std::chrono::time_point<Clock, Duration> const&>()))>::type>
|
||||
: return_clock_time<utc_clock, decltype(Clock::to_utc(std::declval<std::chrono::time_point<Clock, Duration> const&>()))>
|
||||
{};
|
||||
|
||||
// Similiar to above
|
||||
@@ -2306,7 +2306,7 @@ namespace ctc_detail
|
||||
|
||||
template<typename Clock, typename Duration>
|
||||
struct return_from_utc<Clock, Duration, decltype(Clock::from_utc(std::declval<std::chrono::time_point<utc_clock, Duration> const&>()), void())>
|
||||
: return_clock_time<Clock, typename std::decay<decltype(Clock::from_utc(std::declval<std::chrono::time_point<utc_clock, Duration> const&>()))>::type>
|
||||
: return_clock_time<Clock, decltype(Clock::from_utc(std::declval<std::chrono::time_point<utc_clock, Duration> const&>()))>
|
||||
{};
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user