.. Metafunctions/Composition and Argument Binding//quote |40 quote ===== Synopsis -------- .. parsed-literal:: template< template< typename P1 > class F , typename Tag = |unspecified| > struct quote1 { // |unspecified| // |...| }; |...| template< template< typename P1,\ |...| typename P\ *n* > class F , typename Tag = |unspecified| > struct quote\ *n* { // |unspecified| // |...| }; Description ----------- ``quote``\ *n* is a higher-order primitive that wraps an *n*-ary |Metafunction| to create a corresponding |Metafunction Class|. Header ------ .. parsed-literal:: #include Model of -------- |Metafunction Class| Parameters ---------- +---------------+-----------------------+-----------------------------------------------+ | Parameter | Requirement | Description | +===============+=======================+===============================================+ | ``F`` | |Metafunction| | A metafunction to wrap. | +---------------+-----------------------+-----------------------------------------------+ | ``Tag`` | Any type | A tag determining wrap semantics. | +---------------+-----------------------+-----------------------------------------------+ Expression semantics -------------------- For any *n*-ary |Metafunction| ``f`` and arbitrary type ``tag``: .. parsed-literal:: typedef quote\ *n*\ g; typedef quote\ *n*\ g; :Return type: |Metafunction Class| :Semantics: Equivalent to .. parsed-literal:: struct g { template< typename A1,\ |...| typename A\ *n* > struct apply : f { }; }; if ``f`` has a nested type member ``::type``, and to .. parsed-literal:: struct g { template< typename A1,\ |...| typename A\ *n* > struct apply { typedef f type; }; }; otherwise. Example ------- .. parsed-literal:: template< typename T > struct f1 { typedef T type; }; template< typename T1, typename T2, typename T3, typename T4, typename T5 > struct f5 { // no 'type' member! }; typedef quote\ ``1``\::apply::type t1; typedef quote\ ``5``\::apply::type t5; BOOST_MPL_ASSERT(( is_same< t1, int > )); BOOST_MPL_ASSERT(( is_same< t5, f5 > )); See also -------- |Composition and Argument Binding|, |Invocation|, |bind|, |lambda|, |protect|, |apply|