| Home | Libraries | People | FAQ | More

### ATL Ranges

If the `<boost/range/atl.hpp>` is included before or after Boost.Range headers, the ATL collections and strings become models of Range. The table below lists the Traversal Category and `range_reference` of ATL ranges.

Range | Traversal Category | `range_reference<Range>::type`
--- | --- | ---
`CAtlArray<E,ET>` | Random Access Range | `E&`
`CAutoPtrArray<E>` | Random Access Range | `E&`
`CInterfaceArray<I,pi>` | Random Access Range | `CComQIPtr<I,pi>&`
`CAtlList<E,ET>` | Bidirectional Range | `E&`
`CAutoPtrList<E>` | Bidirectional Range | `E&`
`CHeapPtrList<E,A>` | Bidirectional Range | `E&`
`CInterfaceList<I,pi>` | Bidirectional Range | `CComQIPtr<I,pi>&`
`CAtlMap<K,V,KT,VT>` | Forward Range | `Range::CPair&`
`CRBTree<K,V,KT,VT>` | Bidirectional Range | `Range::CPair&`
`CRBMap<K,V,KT,VT>` | Bidirectional Range | `Range::CPair&`
`CRBMultiMap<K,V,KT,VT>` | Bidirectional Range | `Range::CPair&`
`CSimpleStringT<B,b>` | Random Access Range | `B&`
`CStringT<B,ST>` | Random Access Range | `B&`
`CFixedStringT<S,n>` | Random Access Range | `range_reference<S>::type`
`CComBSTR` | Random Access Range | `OLECHAR&`
`CSimpleArray<T,TE>` | Random Access Range | `T&`

Other Boost.Range metafunctions are defined by the following. Let `Range` be any type listed above and `Ref` be the same as `range_reference<Range>::type`. `range_value<Range>::type` is the same as `remove_reference<Ref>::type`, `range_difference<Range>::type` is the same as `std::ptrdiff_t`, and `range_pointer<Range>::type` is the same as `add_pointer<remove_reference<Ref>::type>::type`. As for `const Range`, see below.