// (C) Copyright John Maddock 2005. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_TR1_MATH_OVERLOADS_HPP_INCLUDED # define BOOST_TR1_MATH_OVERLOADS_HPP_INCLUDED # include # ifndef BOOST_NO_SFINAE # include # include # define BOOST_TR1_MATH_RETURN(RET) typename ::boost::enable_if< ::boost::is_convertible, RET >::type # else # define BOOST_TR1_MATH_RETURN(RET) RET # endif # include # include # include namespace boost{ namespace tr1_detail{ template struct largest_real { typedef typename boost::mpl::if_< boost::is_same, long double, typename boost::mpl::if_< boost::is_same, long double, typename boost::mpl::if_< boost::is_same, double, typename boost::mpl::if_< boost::is_same, double, float >::type >::type >::type >::type type; }; template struct promote_to_real { typedef typename largest_real< typename boost::mpl::if_< boost::is_floating_point, T, double>::type, typename boost::mpl::if_< boost::is_floating_point, U, double>::type >::type type; }; } } #endif