Front Page / Sequences / Intrinsic Metafunctions / pop_front

# pop_front

### Synopsis

    template<
          typename Sequence
        >
    struct pop_front
    {
        typedef unspecified type;
    };

### Description

`pop_front` performs a removal at the beginning of the sequence with guaranteed O(1) complexity.

### Header

    #include <boost/mpl/pop_front.hpp>

### Model of

Tag Dispatched Metafunction

### Parameters

Parameter | Requirement | Description
--- | --- | ---
`Sequence` | Front Extensible Sequence | A sequence to erase the first element from.

### Expression semantics

For any Front Extensible Sequence `s`:

    typedef pop_front<s>::type r;

Return type: | Front Extensible Sequence.
Precondition: | `empty<s>::value == false`.
Semantics: | Equivalent to `erase<s,begin<s>::type>::type;`.
Postcondition: | `size<r>::value == size<s>::value - 1`.

### Complexity

Amortized constant time.

### Example

    typedef vector<long>::type types1;
    typedef vector<int,long>::type types2;
    typedef vector<char,int,long>::type types3;

    typedef pop_front<types1>::type result1;
    typedef pop_front<types2>::type result2;
    typedef pop_front<types3>::type result3;

    BOOST_MPL_ASSERT_RELATION( size<result1>::value, ==, 0 );
    BOOST_MPL_ASSERT_RELATION( size<result2>::value, ==, 1 );
    BOOST_MPL_ASSERT_RELATION( size<result3>::value, ==, 2 );

    BOOST_MPL_ASSERT(( is_same< front<result2>::type, long > ));
    BOOST_MPL_ASSERT(( is_same< front<result3>::type, int > ));

### See also

Front Extensible Sequence, `erase`, `push_front`, `front`, `pop_back`