Front Page / Sequences / Intrinsic Metafunctions / begin

# begin

### Synopsis

    template<
          typename X
        >
    struct begin
    {
        typedef unspecified type;
    };

### Description

Returns an iterator that points to the first element of the sequence. If the argument is not a Forward Sequence, returns `void_`.

### Header

    #include <boost/mpl/begin_end.hpp>

### Model of

Tag Dispatched Metafunction

### Parameters

Parameter | Requirement | Description
--- | --- | ---
`X` | Any type | A type whose begin iterator, if any, will be returned.

### Expression semantics

For any arbitrary type `x`:

    typedef begin<x>::type first;

Return type: | Forward Iterator or `void_`.
Semantics: | If `x` is a Forward Sequence, `first` is an iterator pointing to the first element of `s`; otherwise `first` is `void_`.
Postcondition: | If `first` is an iterator, it is either dereferenceable or past-the-end; it is past-the-end if and only if `size<x>::value == 0`.

### Complexity

Amortized constant time.

### Example

    typedef vector< unsigned char,unsigned short,
        unsigned int,unsigned long > unsigned_types;

    typedef begin<unsigned_types>::type iter;
    BOOST_MPL_ASSERT(( is_same< deref<iter>::type, unsigned char > ));

    BOOST_MPL_ASSERT(( is_same< begin<int>::type, void_ > ));

### See also

Iterators, Forward Sequence, `end`, `size`, `empty`