| Home | Libraries | People | FAQ | More

### Concept Checking

Each of the range concepts has a corresponding concept checking class in the file `<boost/range/concepts.hpp>`. These classes may be used in conjunction with the Boost Concept Check library to ensure that the type of a template parameter is compatible with a range concept. If not, a meaningful compile time error is generated. Checks are provided for the range concepts related to iterator traversal categories. For example, the following line checks that the type `T` models the Forward Range concept.

    BOOST_CONCEPT_ASSERT(( ForwardRangeConcept<T> ));

An additional concept check is required for the value access property of the range based on the range's iterator type. For example to check for a ForwardReadableRange, the following code is required.

    BOOST_CONCEPT_ASSERT(( ForwardRangeConcept<T> ));
    BOOST_CONCEPT_ASSERT(( ReadableIteratorConcept<typename range_iterator<T>::type> ));

The following range concept checking classes are provided.

- Class SinglePassRangeConcept checks for Single Pass Range
- Class ForwardRangeConcept checks for Forward Range
- Class BidirectionalRangeConcept checks for Bidirectional Range
- Class RandomAccessRangeConcept checks for Random Access Range

##### See also

Range Terminology and style guidelines

Iterator concepts

Boost Concept Check library