#pragma once #include #include #include #include #include #include #include #include // stl #include namespace mapbox { namespace geometry { template class Cont = std::vector> struct geometry_collection; template class Cont = std::vector> using geometry_base = mapbox::util::variant, line_string, polygon, multi_point, multi_line_string, multi_polygon, geometry_collection>; template class Cont = std::vector> struct geometry : geometry_base { using coordinate_type = T; using geometry_base::geometry_base; }; template class Cont> struct geometry_collection : Cont> { using coordinate_type = T; using geometry_type = geometry; using container_type = Cont; using size_type = typename container_type::size_type; template geometry_collection(Args&&... args) : container_type(std::forward(args)...) { } geometry_collection(std::initializer_list args) : container_type(std::move(args)) {} }; } // namespace geometry } // namespace mapbox