]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/mpl/doc/src/refmanual/Metafunction.rst
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / mpl / doc / src / refmanual / Metafunction.rst
CommitLineData
7c673cae
FG
1.. Metafunctions/Concepts//Metafunction |10
2
3Metafunction
4============
5
6Description
7-----------
8
9.. _`nullary-metafunction`:
10
11A *metafunction* is a class or a class template that represents a
12function invocable at compile-time. An non-nullary metafunction is
13invoked by instantiating the class template with particular
14template parameters (metafunction arguments); the result of the
15metafunction application is accessible through the instantiation's
16nested ``type`` typedef. All metafunction's arguments must be types
17(i.e. only *type template parameters* are allowed). A metafunction
18can have a variable number of parameters. A *nullary metafunction* is
19represented as a (template) class with a nested ``type`` typename
20member.
21
22.. |nullary metafunction| replace:: `nullary-metafunction`_
23
24
25Expression requirements
26-----------------------
27
28|In the following table...| ``f`` is a |Metafunction|.
29
30+-------------------------------+-----------------------+---------------------------+
31| Expression | Type | Complexity |
32+===============================+=======================+===========================+
33| ``f::type`` | Any type | Unspecified. |
34+-------------------------------+-----------------------+---------------------------+
35| ``f<>::type`` | Any type | Unspecified. |
36+-------------------------------+-----------------------+---------------------------+
37| ``f<a1,..,an>::type`` | Any type | Unspecified. |
38+-------------------------------+-----------------------+---------------------------+
39
40
41Expression semantics
42--------------------
43
44.. parsed-literal::
45
46 typedef f::type x;
47
48:Precondition:
49 ``f`` is a nullary |Metafunction|; ``f::type`` is a *type-name*.
50
51:Semantics:
52 ``x`` is the result of the metafunction invocation.
53
54
55.. ...................................................................................
56
57.. parsed-literal::
58
59 typedef f<>::type x;
60
61:Precondition:
62 ``f`` is a nullary |Metafunction|; ``f<>::type`` is a *type-name*.
63
64:Semantics:
65 ``x`` is the result of the metafunction invocation.
66
67
68.. ...................................................................................
69
70.. parsed-literal::
71
72 typedef f<a1,\ |...| \a\ *n*\>::type x;
73
74:Precondition:
75 ``f`` is an *n*-ary |Metafunction|; |a1...an| are types;
76 ``f<a1,...an>::type`` is a *type-name*.
77
78:Semantics:
79 ``x`` is the result of the metafunction invocation
80 with the actual arguments |a1...an|.
81
82
83Models
84------
85
86* |identity|
87* |plus|
88* |begin|
89* |insert|
90* |fold|
91
92
93See also
94--------
95
96|Metafunctions|, |Metafunction Class|, |Lambda Expression|, |Invocation|, |apply|, |lambda|, |bind|
97
98
99