The boost::polygon documentation is not great, but in this area at least it does seem to be fairly clear:
An object that is a model of polygon_90_concept
can be viewed as a model of any of its refinements if it is determined at runtime to conform to the restriction of those concepts. This concept casting is accomplished through the view_as<>()
function.
view_as<rectangle_concept>(polygon_90_object)
The return value of view_as<>()
can be passed into any interface that expects an object of the conceptual type specified in its template parameter.