...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
Checks if a geometry is valid (in the OGC sense)
template<typename Geometry, typename Strategy> bool is_valid(Geometry const & geometry, Strategy const & strategy)
Type 
Concept 
Name 
Description 

Geometry const & 
Any type fulfilling a Geometry Concept 
geometry 
A model of the specified concept 
Strategy const & 
Any type fulfilling a Is_valid Strategy Concept 
strategy 
The strategy which will be used for is_valid calculations 
Returns true if the geometry is valid (in the OGC sense); furthermore, the following geometries are considered valid: multigeometries with no elements, linear geometries containing spikes, areal geometries with duplicate (consecutive) points
Either
#include <boost/geometry.hpp>
Or
#include <boost/geometry/algorithms/is_valid.hpp>
The function is_valid is not defined by OGC.
Geometry 
Status 

Point 

Segment 

Box 

Linestring 

Ring 

Polygon 

MultiPoint 

MultiLinestring 

MultiPolygon 

Variant 

Constanttime for points, segments, boxes and multipoints
Linear for linestrings and multilinestrings
Linearithmic for rings
Currently, worstcase quadratic for polygons and multipolygons
Checks whether a geometry is valid
#include <iostream> #include <boost/geometry.hpp> #include <boost/geometry/geometries/point_xy.hpp> #include <boost/geometry/geometries/polygon.hpp> int main() { typedef boost::geometry::model::d2::point_xy<double> point_type; typedef boost::geometry::model::polygon<point_type> polygon_type; polygon_type poly; boost::geometry::read_wkt("POLYGON((0 0,0 10,10 10,10 0,0 0),(0 0,9 1,9 2,0 0),(0 0,2 9,1 9,0 0),(2 9,9 2,9 9,2 9))", poly); std::cout << "is valid? " << (boost::geometry::is_valid(poly) ? "yes" : "no") << std::endl; return 0; }
Output:
is valid? no