1 // Boost.Geometry (aka GGL, Generic Geometry Library) 2 3 // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands. 4 // Copyright (c) 2008-2012 Bruno Lalande, Paris, France. 5 // Copyright (c) 2009-2012 Mateusz Loskot, London, UK. 6 7 // Parts of Boost.Geometry are redesigned from Geodan's Geographic Library 8 // (geolib/GGL), copyright (c) 1995-2010 Geodan, Amsterdam, the Netherlands. 9 10 // Use, modification and distribution is subject to the Boost Software License, 11 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at 12 // http://www.boost.org/LICENSE_1_0.txt) 13 14 #ifndef BOOST_GEOMETRY_UTIL_PROMOTE_FLOATING_POINT_HPP 15 #define BOOST_GEOMETRY_UTIL_PROMOTE_FLOATING_POINT_HPP 16 17 18 #include <boost/mpl/if.hpp> 19 #include <boost/type_traits/is_integral.hpp> 20 21 22 namespace boost { namespace geometry 23 { 24 25 26 /*! 27 \brief Meta-function converting, if necessary, to "a floating point" type 28 \details 29 - if input type is integer, type is double 30 - else type is input type 31 \ingroup utility 32 */ 33 34 template <typename T, typename PromoteIntegerTo = double> 35 struct promote_floating_point 36 { 37 typedef typename 38 boost::mpl::if_ 39 < 40 boost::is_integral<T>, 41 PromoteIntegerTo, 42 T 43 >::type type; 44 }; 45 46 47 }} // namespace boost::geometry 48 49 50 #endif // BOOST_GEOMETRY_UTIL_PROMOTE_FLOATING_POINT_HPP 51