diff options
Diffstat (limited to 'boost/date_time/posix_time/posix_time_duration.hpp')
-rw-r--r-- | boost/date_time/posix_time/posix_time_duration.hpp | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/boost/date_time/posix_time/posix_time_duration.hpp b/boost/date_time/posix_time/posix_time_duration.hpp index 1143cedb57..c7ec57e8aa 100644 --- a/boost/date_time/posix_time/posix_time_duration.hpp +++ b/boost/date_time/posix_time/posix_time_duration.hpp @@ -9,42 +9,54 @@ * $Date$ */ +#include <boost/core/enable_if.hpp> #include <boost/date_time/compiler_config.hpp> #include <boost/date_time/posix_time/posix_time_config.hpp> +#include <boost/numeric/conversion/cast.hpp> +#include <boost/type_traits/is_integral.hpp> namespace boost { namespace posix_time { //! Allows expression of durations as an hour count + //! The argument must be an integral type /*! \ingroup time_basics */ class BOOST_SYMBOL_VISIBLE hours : public time_duration { public: - explicit hours(long h) : - time_duration(static_cast<hour_type>(h),0,0) + template <typename T> + explicit hours(T const& h, + typename boost::enable_if<boost::is_integral<T>, void>::type* = 0) : + time_duration(numeric_cast<hour_type>(h), 0, 0) {} }; //! Allows expression of durations as a minute count + //! The argument must be an integral type /*! \ingroup time_basics */ class BOOST_SYMBOL_VISIBLE minutes : public time_duration { public: - explicit minutes(long m) : - time_duration(0,static_cast<min_type>(m),0) + template <typename T> + explicit minutes(T const& m, + typename boost::enable_if<boost::is_integral<T>, void>::type* = 0) : + time_duration(0, numeric_cast<min_type>(m),0) {} }; //! Allows expression of durations as a seconds count + //! The argument must be an integral type /*! \ingroup time_basics */ class BOOST_SYMBOL_VISIBLE seconds : public time_duration { public: - explicit seconds(long s) : - time_duration(0,0,static_cast<sec_type>(s)) + template <typename T> + explicit seconds(T const& s, + typename boost::enable_if<boost::is_integral<T>, void>::type* = 0) : + time_duration(0,0, numeric_cast<sec_type>(s)) {} }; @@ -70,12 +82,8 @@ namespace posix_time { typedef date_time::subsecond_duration<time_duration,1000000000> nanosec; typedef date_time::subsecond_duration<time_duration,1000000000> nanoseconds; - #endif - - - } }//namespace posix_time |