Boost C++ Libraries of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

This is an old version of boost. Click here for the latest version's documentation home page.



      typename T
    , T Start
    , T Finish
struct range_c
    typedef integral_c<T,Start> start;
    typedef integral_c<T,Finish> finish;


range_c is a sorted Random Access Sequence of Integral Constants. It is not an Extensible Sequence, meaning that transformation algorithms, such as push_front or replace, are not applicable to it, at least directly - you need to copy the content of the range into a more suitable sequence, when needed [1].


#include "boost/mpl/range_c.hpp"


typedef range_c<int,0,0> range0;
typedef range_c<int,0,1> range1;
typedef range_c<int,0,10> range10;

BOOST_STATIC_ASSERT(size<range0>::type::value == 0); BOOST_STATIC_ASSERT(size<range1>::type::value == 1); BOOST_STATIC_ASSERT(size<range10>::type::value == 10);

BOOST_STATIC_ASSERT(empty<range0>::type::value); BOOST_STATIC_ASSERT(!empty<range1>::type::value); BOOST_STATIC_ASSERT(!empty<range10>::type::value);

BOOST_MPL_ASSERT_IS_SAME(begin<range0>::type, end<range0>::type); BOOST_MPL_ASSERT_NOT_SAME(begin<range1>::type, end<range1>::type); BOOST_MPL_ASSERT_NOT_SAME(begin<range10>::type, end<range10>::type);

BOOST_STATIC_ASSERT(front<range1>::type::value == 0); BOOST_STATIC_ASSERT(back<range1>::type::value == 0); BOOST_STATIC_ASSERT(front<range10>::type::value == 0); BOOST_STATIC_ASSERT(back<range10>::type::value == 9);


[1] In fact, the most common application of range_c class is to simplify the creation of sorted list or vector:

typedef copy<
    , push_back<_,_>
    , vector<>
    >::type numbers;

See also

Random Access Sequence, vector, vector_c, list, list_c

Table of Contents
Last edited July 17, 2002 8:31 am