Index: chrono/duration.hpp =================================================================== --- chrono/duration.hpp (revision 69105) +++ chrono/duration.hpp (working copy) @@ -432,8 +432,6 @@ template BOOST_CHRONO_CONSTEXPR explicit duration(const Rep2& r -#if defined(BOOST_MSVC) && (BOOST_MSVC == 1500) -#else , typename boost::enable_if < mpl::and_ < boost::is_convertible, @@ -446,8 +444,7 @@ > > >::type* = 0 -#endif - ) + ) : rep_(r) { } ~duration() {} //= default; duration(const duration& rhs) : rep_(rhs.rep_) {} // = default; @@ -461,19 +458,16 @@ template BOOST_CHRONO_CONSTEXPR duration(const duration& d -#if defined(BOOST_MSVC) && (BOOST_MSVC == 1500) -#else , typename boost::enable_if < mpl::or_ < treat_as_floating_point, mpl::and_ < - mpl::bool_ < ratio_divide::type::den == 1>, + ratio_detail::is_evenly_divisible_by, mpl::not_ < treat_as_floating_point > > > >::type* = 0 -#endif - ) + ) : rep_(chrono::detail::duration_cast, duration>()(d).count()) {} // observer Index: ratio/detail/overflow_helpers.hpp =================================================================== --- ratio/detail/overflow_helpers.hpp (revision 69105) +++ ratio/detail/overflow_helpers.hpp (working copy) @@ -300,7 +300,11 @@ boost::ratio_detail::br_mul::value >::type type; }; - + + template + struct is_evenly_divisible_by : public boost::mpl::bool_ < ratio_divide::type::den == 1 > + {}; + template struct is_ratio : public boost::false_type {};