...one of the most highly
regarded and expertly designed C++ library projects in the
world. — Herb Sutter and Andrei
The Linestring Concept describes the requirements for a linestring type. All algorithms in Boost.Geometry will check any geometry arguments against the concept requirements.
A linestring is a Curve with linear interpolation between Points. (OGC Simple Feature Specification).
The Linestring Concept is defined as following:
range_value<...>::typemust fulfill the Point Concept
Besides the Concepts, which are checks on compile-time, there are rules that valid linestrings must fulfill. Most algorithms work on any linestring, so either self-crossing or not. However, for correct results using the overlay algorithms (intersection and difference algorithms in combination with a polygon) self-intersections can disturb the process and result in incorrect results.
See also the sample in the Boost.Range documentation showing how a type can be adapted to a Boost.Range to fulfill the concept of a Linestring