Boost logo

Boost :

From: Daniel Walker (daniel.j.walker_at_[hidden])
Date: 2006-03-03 16:08:45


I've been using the Boost Range library a lot lately and felt the need for
some compile-time concept checks. They're pretty simple to write using the
Boost Concept Check library. So, I wrote concept checking classes for the
four range concepts mentioned in the documentation. To illustrate their
usage, the following checks if a type X models the ForwardRange concept.

function_requires<ForwardRangeConcept<X> >();

I've been checking the value access property of the range separately using
iterator concept checks on the range's iterator. So, for a
ForwardReadableRange ...

function_requires<ForwardRangeConcept<X> >();
        typename range_iterator<X>::type

Implementing the concept checking classes is pretty straight forward using
the range documentation. As an example, here's my implementation for

template<typename X>
struct BidirectionalRangeConcept {
    typedef typename range_reverse_iterator<X>::type range_reverse_iterator;
    typedef typename range_const_reverse_iterator<X>::type
    void constraints()
        function_requires<ForwardRangeConcept<X> >();
                typename range_iterator<X>::type
        i = rbegin(a);
        i = rend(a);
    void const_constraints(const X& a)
        ci = rbegin(a);
        ci = rend(a);
    X a;
    range_reverse_iterator i;
    range_const_reverse_iterator ci;

Anyway, I hope there's enough interest to include concept checks like these
in the Boost Range library for a future release. I'd be glad to submit a
file containing my implementations. Please, let me know what you think!

 Daniel Walker

Boost list run by bdawes at, gregod at, cpdaniel at, john at