diff --git a/include/date/tz.h b/include/date/tz.h index 1591f80..db39880 100644 --- a/include/date/tz.h +++ b/include/date/tz.h @@ -2259,14 +2259,14 @@ struct clock_time_conversion namespace ctc_detail { //Check if TimePoint is time for given clock, - //if so exposes it as type typedef + //if not emits hard errorf template struct return_clock_time - : std::enable_if< - std::is_same::value, - TimePoint - > - {}; + { + using clock_time_point = std::chrono::time_point; + static_assert(std::is_same::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 struct return_to_sys const&>()), void())> - : return_clock_time const&>()))>::type> + : return_clock_time const&>()))> {}; // Similiar to above @@ -2286,7 +2286,7 @@ namespace ctc_detail template struct return_from_sys const&>()), void())> - : return_clock_time const&>()))>::type> + : return_clock_time const&>()))> {}; // Similiar to above @@ -2296,7 +2296,7 @@ namespace ctc_detail template struct return_to_utc const&>()), void())> - : return_clock_time const&>()))>::type> + : return_clock_time const&>()))> {}; // Similiar to above @@ -2306,7 +2306,7 @@ namespace ctc_detail template struct return_from_utc const&>()), void())> - : return_clock_time const&>()))>::type> + : return_clock_time const&>()))> {}; } diff --git a/test/tz_test/to_sys_return_int.fail.cpp b/test/tz_test/to_sys_return_int.fail.cpp new file mode 100644 index 0000000..76c8551 --- /dev/null +++ b/test/tz_test/to_sys_return_int.fail.cpp @@ -0,0 +1,49 @@ +// The MIT License (MIT) +// +// Copyright (c) 2017 Tomasz Kamiński +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +#include "tz.h" + +struct bad_clock +{ + using duration = std::chrono::system_clock::duration; + using rep = duration::rep; + using period = duration::period; + using time_point = std::chrono::time_point; + + template + static + int + to_sys(std::chrono::time_point const& tp) + { + return tp.time_since_epoch().count(); + } +}; + +int +main() +{ + using namespace date; + using sys_clock = std::chrono::system_clock; + + auto bt = bad_clock::time_point(); + clock_cast(bt); +} diff --git a/test/tz_test/to_sys_return_reference.cpp b/test/tz_test/to_sys_return_reference.cpp new file mode 100644 index 0000000..1f8527f --- /dev/null +++ b/test/tz_test/to_sys_return_reference.cpp @@ -0,0 +1,51 @@ +// The MIT License (MIT) +// +// Copyright (c) 2017 Tomasz Kamiński +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +#include "tz.h" + +struct bad_clock +{ + using duration = std::chrono::system_clock::duration; + using rep = duration::rep; + using period = duration::period; + using time_point = std::chrono::time_point; + + template + static + date::sys_time const& + to_sys(std::chrono::time_point const& tp) + { + static date::sys_time val; + val = date::sys_time(tp.time_since_epoch()); + return val; + } +}; + +int +main() +{ + using namespace date; + using sys_clock = std::chrono::system_clock; + + auto bt = bad_clock::time_point(); + clock_cast(bt); +} diff --git a/test/tz_test/to_sys_return_utc_time.fail.cpp b/test/tz_test/to_sys_return_utc_time.fail.cpp new file mode 100644 index 0000000..352b983 --- /dev/null +++ b/test/tz_test/to_sys_return_utc_time.fail.cpp @@ -0,0 +1,49 @@ +// The MIT License (MIT) +// +// Copyright (c) 2017 Tomasz Kamiński +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +#include "tz.h" + +struct bad_clock +{ + using duration = std::chrono::system_clock::duration; + using rep = duration::rep; + using period = duration::period; + using time_point = std::chrono::time_point; + + template + static + date::utc_time + to_sys(std::chrono::time_point const& tp) + { + return utc_time(tp.time_since_epoch()); + } +}; + +int +main() +{ + using namespace date; + using sys_clock = std::chrono::system_clock; + + auto bt = bad_clock::time_point(); + clock_cast(bt); +}