The MPL Reference Manual: arg

Front Page / Metafunctions / Composition and Argument Binding / arg

# arg

### Synopsis

    template< int n > struct arg;

    template<> struct arg<1>
    {
        template< typename A1,... typename An = unspecified >
        struct apply
        {
            typedef A1 type;
        };
    };

    ...

    template<> struct arg<n>
    {
        template< typename A1,... typename An >
        struct apply
        {
            typedef An type;
        };
    };

### Description

`arg<n>` specialization is a Metafunction Class that return the `n`th of its arguments.

### Header

    #include <boost/mpl/arg.hpp>

### Parameters

Parameter | Requirement | Description
--- | --- | ---
`n` | An integral constant | A number of argument to return.

### Expression semantics

For any integral constant `n` in the range [1, `BOOST_MPL_LIMIT_METAFUNCTION_ARITY`] and arbitrary types `a1`,... `an`:

    typedef apply_wrapn< arg<n>,a1,...an >::type x;

Return type: | A type.
Semantics: | `x` is identical to `an`.

### Example

    typedef apply_wrap5< arg<1>,bool,char,short,int,long >::type t1;
    typedef apply_wrap5< arg<3>,bool,char,short,int,long >::type t3;

    BOOST_MPL_ASSERT(( is_same< t1, bool > ));
    BOOST_MPL_ASSERT(( is_same< t3, short > ));

### See also

Composition and Argument Binding, Placeholders, `lambda`, `bind`, `apply`, `apply_wrap`