summaryrefslogtreecommitdiff
path: root/boost/date_time/posix_time/posix_time_duration.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/date_time/posix_time/posix_time_duration.hpp')
-rw-r--r--boost/date_time/posix_time/posix_time_duration.hpp28
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