*** ../chrono/boost/chrono/chrono.hpp	2010-08-04 16:13:03.204352521 +0200
--- boost/chrono/chrono.hpp	2010-08-04 16:16:16.441852738 +0200
***************
*** 68,74 ****
  #include <climits>
  #include <limits>
  
! 
  #include <boost/ratio.hpp>
  #include <boost/type_traits/common_type.hpp>
  #include <boost/system/error_code.hpp>
--- 68,74 ----
  #include <climits>
  #include <limits>
  
! #include <boost/mpl/logical.hpp>
  #include <boost/ratio.hpp>
  #include <boost/type_traits/common_type.hpp>
  #include <boost/system/error_code.hpp>
***************
*** 521,534 ****
          BOOST_CHRONO_CONSTEXPR duration() { } // = default;
          template <class Rep2>
          BOOST_CHRONO_CONSTEXPR explicit duration(const Rep2& r,
!             typename boost::enable_if_c
                  <
!                 (   (boost::is_convertible<Rep2, rep>::value)
!                 &&  ((treat_as_floating_point<rep>::value)
!                     || (    !treat_as_floating_point<rep>::value
!                         &&  !treat_as_floating_point<Rep2>::value)
!                     )
!                 )
                  >::type* = 0)
                    : rep_(r) { }
          ~duration() {} //= default;
--- 521,541 ----
          BOOST_CHRONO_CONSTEXPR duration() { } // = default;
          template <class Rep2>
          BOOST_CHRONO_CONSTEXPR explicit duration(const Rep2& r,
!             typename boost::enable_if
                  <
!                     boost::mpl::and_
!                     <
!                         boost::is_convertible<Rep2, rep>,
!                         boost::mpl::or_
!                         <
!                             treat_as_floating_point<rep>,
!                             boost::mpl::and_
!                             <
!                                 boost::mpl::not_<boost::is_floating_point<rep> >,
!                                 boost::mpl::not_<boost::is_floating_point<Rep2> >
!                             >
!                         >
!                     >
                  >::type* = 0)
                    : rep_(r) { }
          ~duration() {} //= default;
***************
*** 542,553 ****
          // conversions
          template <class Rep2, class Period2>
          BOOST_CHRONO_CONSTEXPR duration(const duration<Rep2, Period2>& d,
!             typename boost::enable_if_c
                  <
!                 (   (treat_as_floating_point<rep>::value)
!                 || (    (ratio_divide<Period2, period>::type::den == 1)
!                     &&  (!treat_as_floating_point<Rep2>::value))
!                 )
                  >::type* = 0)
  #ifdef        __GNUC__
              // GCC 4.2.4 refused to accept a definition at this point,
--- 549,565 ----
          // conversions
          template <class Rep2, class Period2>
          BOOST_CHRONO_CONSTEXPR duration(const duration<Rep2, Period2>& d,
!             typename boost::enable_if
                  <
!                     boost::mpl::or_
!                     <
!                         treat_as_floating_point<rep>,
!                         boost::mpl::and_
!                         <
!                             boost::mpl::bool_<ratio_divide<Period2, period>::type::den == 1>,
!                             boost::mpl::not_<treat_as_floating_point<Rep2> >
!                         >
!                     >
                  >::type* = 0)
  #ifdef        __GNUC__
              // GCC 4.2.4 refused to accept a definition at this point,
***************
*** 621,631 ****
  
    template <class Rep1, class Period, class Rep2>
    inline
!   typename boost::enable_if_c
      <
!         (   (boost::is_convertible<Rep1, typename common_type<Rep1, Rep2>::type>::value)
!         &&  (boost::is_convertible<Rep2, typename common_type<Rep1, Rep2>::type>::value)
!         ),
          duration<typename common_type<Rep1, Rep2>::type, Period>
    >::type
    operator*(const duration<Rep1, Period>& d, const Rep2& s)
--- 633,645 ----
  
    template <class Rep1, class Period, class Rep2>
    inline
!   typename boost::enable_if
      <
!         boost::mpl::and_
!         <
!             boost::is_convertible<Rep1, typename common_type<Rep1, Rep2>::type>,
!             boost::is_convertible<Rep2, typename common_type<Rep1, Rep2>::type>
!         >,
          duration<typename common_type<Rep1, Rep2>::type, Period>
    >::type
    operator*(const duration<Rep1, Period>& d, const Rep2& s)
***************
*** 638,648 ****
  
    template <class Rep1, class Period, class Rep2>
    inline
!   typename boost::enable_if_c
      <
!         (   (boost::is_convertible<Rep1, typename common_type<Rep1, Rep2>::type>::value)
!         &&  (boost::is_convertible<Rep2, typename common_type<Rep1, Rep2>::type>::value)
!         ),
          duration<typename common_type<Rep1, Rep2>::type, Period>
    >::type
    operator*(const Rep1& s, const duration<Rep2, Period>& d)
--- 652,664 ----
  
    template <class Rep1, class Period, class Rep2>
    inline
!   typename boost::enable_if
      <
!         boost::mpl::and_
!         <
!             boost::is_convertible<Rep1, typename common_type<Rep1, Rep2>::type>,
!             boost::is_convertible<Rep2, typename common_type<Rep1, Rep2>::type>
!         >,
          duration<typename common_type<Rep1, Rep2>::type, Period>
    >::type
    operator*(const Rep1& s, const duration<Rep2, Period>& d)
***************
*** 1081,1092 ****
      template <class Rep, class Period>
      template <class Rep2, class Period2>
      BOOST_CHRONO_CONSTEXPR duration<Rep, Period>::duration(const duration<Rep2, Period2>& d,
!         typename boost::enable_if_c
              <
!             (   (treat_as_floating_point<rep>::value)
!             || (    (ratio_divide<Period2, period>::type::den == 1)
!                 &&  (!treat_as_floating_point<Rep2>::value))
!             )
              >::type*)
            : rep_(duration_cast<duration>(d).count()) {}
  #endif
--- 1097,1113 ----
      template <class Rep, class Period>
      template <class Rep2, class Period2>
      BOOST_CHRONO_CONSTEXPR duration<Rep, Period>::duration(const duration<Rep2, Period2>& d,
!         typename boost::enable_if
              <
!                 boost::mpl::or_
!                 <
!                     treat_as_floating_point<rep>,
!                     boost::mpl::and_
!                     <
!                         boost::mpl::bool_<ratio_divide<Period2, period>::type::den == 1>,
!                         boost::mpl::not_<treat_as_floating_point<Rep2> >
!                     >
!                 >
              >::type*)
            : rep_(duration_cast<duration>(d).count()) {}
  #endif

