diff --git a/include/boost/geometry/algorithms/num_points.hpp b/include/boost/geometry/algorithms/num_points.hpp index c21909c2c..ca791a306 100644 --- a/include/boost/geometry/algorithms/num_points.hpp +++ b/include/boost/geometry/algorithms/num_points.hpp @@ -27,9 +27,9 @@ #include #include #include -#include #include #include +#include namespace boost { namespace geometry @@ -109,30 +109,6 @@ template struct num_points: not_implemented {}; -template -struct num_points, Unused> -{ - struct visitor: boost::static_visitor - { - bool m_add_for_open; - - visitor(bool add_for_open): m_add_for_open(add_for_open) {} - - template - typename std::size_t operator()(Geometry const& geometry) const - { - return dispatch::num_points::apply(geometry, m_add_for_open); - } - }; - - template - static inline std::size_t - apply(Variant const& variant_geometry, bool add_for_open) - { - return boost::apply_visitor(visitor(add_for_open), variant_geometry); - } -}; - template struct num_points : detail::num_points::other_count<1> @@ -163,6 +139,41 @@ struct num_points : detail::num_points::polygon_count {}; +template +struct devarianted_num_points +{ + static inline std::size_t apply(Geometry const& geometry, + bool add_for_open) + { + return num_points::apply(geometry, add_for_open); + } +}; + +template +struct devarianted_num_points > +{ + struct visitor: boost::static_visitor + { + bool m_add_for_open; + + visitor(bool add_for_open): m_add_for_open(add_for_open) {} + + template + typename std::size_t operator()(Geometry const& geometry) const + { + return dispatch::num_points::apply(geometry, m_add_for_open); + } + }; + + static inline std::size_t + apply(boost::variant const& geometry, + bool add_for_open) + { + return boost::apply_visitor(visitor(add_for_open), geometry); + } +}; + + } // namespace dispatch #endif @@ -183,7 +194,7 @@ inline std::size_t num_points(Geometry const& geometry, bool add_for_open = fals { concept::check(); - return dispatch::num_points::apply(geometry, add_for_open); + return dispatch::devarianted_num_points::apply(geometry, add_for_open); } }} // namespace boost::geometry