]>
Commit | Line | Data |
---|---|---|
1 | .. Macros/Broken Compiler Workarounds//BOOST_MPL_AUX_LAMBDA_SUPPORT | |
2 | ||
3 | BOOST_MPL_AUX_LAMBDA_SUPPORT | |
4 | ============================ | |
5 | ||
6 | Synopsis | |
7 | -------- | |
8 | ||
9 | .. parsed-literal:: | |
10 | ||
11 | #define BOOST_MPL_AUX_LAMBDA_SUPPORT(arity, fun, params) \\ | |
12 | |unspecified-token-seq| \\ | |
13 | /\*\*/ | |
14 | ||
15 | ||
16 | ||
17 | Description | |
18 | ----------- | |
19 | ||
20 | Enables metafunction ``fun`` for the use in |Lambda Expression|\ s on | |
21 | compilers that don't support partial template specialization or/and | |
22 | template template parameters. Expands to nothing on conforming compilers. | |
23 | ||
24 | ||
25 | Header | |
26 | ------ | |
27 | ||
28 | .. parsed-literal:: | |
29 | ||
30 | #include <boost/mpl/aux\_/lambda_support.hpp> | |
31 | ||
32 | ||
33 | Parameters | |
34 | ---------- | |
35 | ||
36 | +---------------+-------------------------------+---------------------------------------------------+ | |
37 | | Parameter | Requirement | Description | | |
38 | +===============+===============================+===================================================+ | |
39 | | ``arity`` | An integral constant | The metafunction's arity, i.e. the number of its | | |
40 | | | | template parameters, including the defaults. | | |
41 | +---------------+-------------------------------+---------------------------------------------------+ | |
42 | | ``fun`` | A legal identifier token | The metafunction's name. | | |
43 | +---------------+-------------------------------+---------------------------------------------------+ | |
44 | | ``params`` | A |PP-tuple| | A tuple of the metafunction's parameter names, in | | |
45 | | | | their original order, including the defaults. | | |
46 | +---------------+-------------------------------+---------------------------------------------------+ | |
47 | ||
48 | ||
49 | Expression semantics | |
50 | -------------------- | |
51 | ||
52 | For any integral constant ``n``, a |Metafunction| ``fun``, and arbitrary types |A1...An|: | |
53 | ||
54 | ||
55 | .. parsed-literal:: | |
56 | ||
57 | template< typename A1,\ |...| typename A\ *n* > struct fun | |
58 | { | |
59 | // |...| | |
60 | ||
61 | BOOST_MPL_AUX_LAMBDA_SUPPORT(n, fun, (A1,\ |...|\ A\ *n*\ )) | |
62 | }; | |
63 | ||
64 | :Precondition: | |
65 | Appears in ``fun``\ 's scope, immediately followed by the scope-closing | |
66 | bracket (``}``). | |
67 | ||
68 | :Return type: | |
69 | None. | |
70 | ||
71 | :Semantics: | |
72 | Expands to nothing and has no effect on conforming compilers. On compilers that | |
73 | don't support partial template specialization or/and template template parameters | |
74 | expands to an unspecified token sequence enabling ``fun`` to participate in | |
75 | |Lambda Expression|\ s with the semantics described in this manual. | |
76 | ||
77 | ||
78 | Example | |
79 | ------- | |
80 | ||
81 | .. parsed-literal:: | |
82 | ||
83 | template< typename T, typename U = int > struct f | |
84 | { | |
85 | typedef T type[sizeof(U)]; | |
86 | ||
87 | BOOST_MPL_AUX_LAMBDA_SUPPORT(2, f, (T,U)) | |
88 | }; | |
89 | ||
90 | typedef apply\ ``1``\< f<char,_1>,long >::type r; | |
91 | BOOST_MPL_ASSERT(( is_same< r, char[sizeof(long)] > )); | |
92 | ||
93 | ||
94 | See also | |
95 | -------- | |
96 | ||
97 | |Macros|, |Metafunctions|, |Lambda Expression| | |
98 | ||
99 | ||
100 | .. |PP-tuple| replace:: `PP-tuple <http://www.boost.org/libs/preprocessor/doc/data/tuples.html>`__ | |
101 | ||
102 | ||
103 |