Front Page / Metafunctions / Type Selection / if_c

# if_c

### Synopsis

    template<
          bool c
        , typename T1
        , typename T2
        >
    struct if_c
    {
        typedef unspecified type;
    };

### Description

Returns one of its two arguments, `T1` or `T2`, depending on the value of integral constant `c`. `if_c<c,t1,t2>::type` is a shorcut notation for `if_< bool_<c>,t1,t2 >::type`.

### Header

    #include <boost/mpl/if.hpp>

### Parameters

Parameter | Requirement | Description
--- | --- | ---
`c` | An integral constant | A selection condition.
`T1`, `T2` | Any type | Types to select from.

### Expression semantics

For any integral constant `c` and arbitrary types `t1`, `t2`:

    typedef if_c<c,t1,t2>::type t;

Return type: | Any type.
Semantics: | Equivalent to `typedef if_< bool_<c>,t1,t2 >::type t;`

### Example

    typedef if_c<true,char,long>::type t1;
    typedef if_c<false,char,long>::type t2;

    BOOST_MPL_ASSERT(( is_same<t1, char> ));
    BOOST_MPL_ASSERT(( is_same<t2, long> ));

    // allocates space for an object of class T on heap or "inplace"
    // depending on its size
    template< typename T > struct lightweight
    {
        // ...
        typedef typename if_c<
              sizeof(T) <= sizeof(T*)
            , inplace_storage<T>
            , heap_storage<T>
            >::type impl_t;

        impl_t impl;
    };

### See also

Metafunctions, Integral Constant, if_, eval_if, bool_