.. Metafunctions/Type Selection//if_c |20 if_c ==== Synopsis -------- .. parsed-literal:: 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::type`` is a shorcut notation for ``if_< bool_,t1,t2 >::type``. Header ------ .. parsed-literal:: #include 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``: .. parsed-literal:: typedef if_c::type t; :Return type: Any type. :Semantics: Equivalent to ``typedef if_< bool_,t1,t2 >::type t;`` Example ------- .. parsed-literal:: typedef if_c::type t1; typedef if_c::type t2; BOOST_MPL_ASSERT(( is_same )); BOOST_MPL_ASSERT(( is_same )); .. parsed-literal:: // 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 , heap_storage >::type impl_t; impl_t impl; }; See also -------- |Metafunctions|, |Integral Constant|, |if_|, |eval_if|, |bool_| .. copyright:: Copyright © 2001-2009 Aleksey Gurtovoy and David Abrahams Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)