diff --git a/doc/src/docutils/tools/support_status/support_status.cpp b/doc/src/docutils/tools/support_status/support_status.cpp index 4c0ca2165..5bd3f0640 100644 --- a/doc/src/docutils/tools/support_status/support_status.cpp +++ b/doc/src/docutils/tools/support_status/support_status.cpp @@ -49,7 +49,6 @@ struct check_distance template struct check_convert : boost::geometry::dispatch::convert< - boost::is_same::value && !boost::is_array::value, typename boost::geometry::tag_cast::type, boost::geometry::multi_tag>::type, typename boost::geometry::tag_cast::type, boost::geometry::multi_tag>::type, G1, diff --git a/include/boost/geometry/algorithms/assign.hpp b/include/boost/geometry/algorithms/assign.hpp index d7d51b17f..411e4db83 100644 --- a/include/boost/geometry/algorithms/assign.hpp +++ b/include/boost/geometry/algorithms/assign.hpp @@ -165,7 +165,6 @@ inline void assign(Geometry1& geometry1, Geometry2 const& geometry2) dispatch::convert < - false, typename tag::type, typename tag::type, Geometry2, diff --git a/include/boost/geometry/algorithms/convert.hpp b/include/boost/geometry/algorithms/convert.hpp index 14534e92a..fe58064d2 100644 --- a/include/boost/geometry/algorithms/convert.hpp +++ b/include/boost/geometry/algorithms/convert.hpp @@ -214,10 +214,11 @@ namespace dispatch template < - bool UseAssignment, typename Tag1, typename Tag2, typename Geometry1, typename Geometry2, - std::size_t DimensionCount = dimension::type::value + std::size_t DimensionCount = dimension::type::value, + bool UseAssignment = boost::is_same::value + && !boost::is_array::value > struct convert: boost::geometry::not_implemented {}; @@ -229,7 +230,7 @@ template typename Geometry1, typename Geometry2, std::size_t DimensionCount > -struct convert +struct convert { // Same geometry type -> copy whole geometry static inline void apply(Geometry1 const& source, Geometry2& destination) @@ -244,7 +245,7 @@ template typename Geometry1, typename Geometry2, std::size_t DimensionCount > -struct convert +struct convert : detail::conversion::point_to_point {}; @@ -254,7 +255,7 @@ template typename Box1, typename Box2, std::size_t DimensionCount > -struct convert +struct convert : detail::conversion::indexed_to_indexed {}; @@ -264,19 +265,19 @@ template typename Segment1, typename Segment2, std::size_t DimensionCount > -struct convert +struct convert : detail::conversion::indexed_to_indexed {}; template -struct convert +struct convert : detail::conversion::segment_to_range {}; template -struct convert +struct convert : detail::conversion::range_to_range < Ring1, @@ -287,17 +288,17 @@ struct convert {}; template -struct convert +struct convert : detail::conversion::range_to_range {}; template -struct convert +struct convert : detail::conversion::polygon_to_polygon {}; template -struct convert +struct convert : detail::conversion::box_to_range < Box, @@ -309,7 +310,7 @@ struct convert template -struct convert +struct convert { static inline void apply(Box const& box, Polygon& polygon) { @@ -317,15 +318,16 @@ struct convert convert < - false, box_tag, ring_tag, - Box, ring_type, 2 + box_tag, ring_tag, + Box, ring_type, + 2, false >::apply(box, exterior_ring(polygon)); } }; template -struct convert +struct convert { static inline void apply(Point const& point, Box& box) { @@ -342,22 +344,23 @@ struct convert template -struct convert +struct convert { static inline void apply(Ring const& ring, Polygon& polygon) { typedef typename ring_type::type ring_type; convert < - false, ring_tag, ring_tag, - Ring, ring_type, DimensionCount + ring_tag, ring_tag, + Ring, ring_type, + DimensionCount, false >::apply(ring, exterior_ring(polygon)); } }; template -struct convert +struct convert { static inline void apply(Polygon const& polygon, Ring& ring) { @@ -365,9 +368,9 @@ struct convert convert < - false, ring_tag, ring_tag, - ring_type, Ring, DimensionCount + ring_type, Ring, + DimensionCount, false >::apply(exterior_ring(polygon), ring); } }; @@ -399,9 +402,6 @@ inline void convert(Geometry1 const& geometry1, Geometry2& geometry2) dispatch::convert < - boost::is_same::value - // && boost::has_assign::value, -- type traits extensions - && ! boost::is_array::value, typename tag_cast::type, multi_tag>::type, typename tag_cast::type, multi_tag>::type, Geometry1, diff --git a/include/boost/geometry/multi/algorithms/convert.hpp b/include/boost/geometry/multi/algorithms/convert.hpp index 22270649f..6a37d04ce 100644 --- a/include/boost/geometry/multi/algorithms/convert.hpp +++ b/include/boost/geometry/multi/algorithms/convert.hpp @@ -74,18 +74,13 @@ namespace dispatch // version types might be the same and therefore we call boost::is_same again template -struct convert +struct convert : detail::conversion::multi_to_multi < Multi1, Multi2, convert < - boost::is_same - < - typename boost::range_value::type, - typename boost::range_value::type - >::value, typename single_tag_of < typename tag::type @@ -102,14 +97,13 @@ struct convert {}; template -struct convert +struct convert : detail::conversion::single_to_multi < Single, Multi, convert < - false, typename tag::type, typename single_tag_of < @@ -117,7 +111,8 @@ struct convert >::type, Single, typename boost::range_value::type, - DimensionCount + DimensionCount, + false > > {};