• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<html>
2<head>
3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4<title>Allocator Access</title>
5<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
6<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
7<link rel="home" href="../index.html" title="Chapter 1. Boost.Core">
8<link rel="up" href="../index.html" title="Chapter 1. Boost.Core">
9<link rel="prev" href="addressof.html" title="addressof">
10<link rel="next" href="alloc_construct.html" title="alloc_construct, alloc_destroy">
11</head>
12<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
13<table cellpadding="2" width="100%"><tr>
14<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
15<td align="center"><a href="../../../../../index.html">Home</a></td>
16<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td>
17<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
18<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
19<td align="center"><a href="../../../../../more/index.htm">More</a></td>
20</tr></table>
21<hr>
22<div class="spirit-nav">
23<a accesskey="p" href="addressof.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="alloc_construct.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
24</div>
25<div class="section">
26<div class="titlepage"><div><div><h2 class="title" style="clear: both">
27<a name="core.allocator_access"></a><a class="link" href="allocator_access.html" title="Allocator Access">Allocator Access</a>
28</h2></div></div></div>
29<div class="toc"><dl class="toc">
30<dt><span class="section"><a href="allocator_access.html#core.allocator_access.overview">Overview</a></span></dt>
31<dt><span class="section"><a href="allocator_access.html#core.allocator_access.examples">Examples</a></span></dt>
32<dt><span class="section"><a href="allocator_access.html#core.allocator_access.reference">Reference</a></span></dt>
33<dt><span class="section"><a href="allocator_access.html#core.allocator_access.acknowledgments">Acknowledgments</a></span></dt>
34</dl></div>
35<div class="simplesect">
36<div class="titlepage"><div><div><h3 class="title">
37<a name="idm45312831264528"></a>Authors</h3></div></div></div>
38<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
39          Glen Fernandes
40        </li></ul></div>
41</div>
42<div class="section">
43<div class="titlepage"><div><div><h3 class="title">
44<a name="core.allocator_access.overview"></a><a class="link" href="allocator_access.html#core.allocator_access.overview" title="Overview">Overview</a>
45</h3></div></div></div>
46<p>
47        The header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">core</span><span class="special">/</span><span class="identifier">allocator_access</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
48        provides the class and function templates to simplify allocator use. It provides
49        the same functionality as the C++ standard library <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator_traits</span></code>
50        but with individual templates for each allocator feature.
51      </p>
52<p>
53        These facilities also simplify existing libraries by avoiding having to check
54        for <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_ALLOCATOR</span></code>
55        and conditionally use <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator_traits</span></code>.
56      </p>
57</div>
58<div class="section">
59<div class="titlepage"><div><div><h3 class="title">
60<a name="core.allocator_access.examples"></a><a class="link" href="allocator_access.html#core.allocator_access.examples" title="Examples">Examples</a>
61</h3></div></div></div>
62<p>
63        The following example shows these utilities used in the definition of an
64        allocator-aware container class:
65      </p>
66<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">default_allocator</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="special">&gt;</span>
67<span class="keyword">class</span> <span class="identifier">container</span>
68    <span class="special">:</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">empty_value</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">allocator_rebind</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">,</span> <span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">&gt;</span> <span class="special">{</span>
69<span class="keyword">public</span><span class="special">:</span>
70    <span class="keyword">typedef</span> <span class="identifier">T</span> <span class="identifier">value_type</span><span class="special">;</span>
71    <span class="keyword">typedef</span> <span class="identifier">A</span> <span class="identifier">allocator_type</span><span class="special">;</span>
72    <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">allocator_size_type</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">size_type</span><span class="special">;</span>
73    <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">allocator_difference_type</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">difference_type</span><span class="special">;</span>
74    <span class="keyword">typedef</span> <span class="identifier">value_type</span><span class="special">&amp;</span> <span class="identifier">reference</span><span class="special">;</span>
75    <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="identifier">value_type</span><span class="special">&amp;</span> <span class="identifier">const_reference</span><span class="special">;</span>
76    <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">allocator_pointer</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">pointer</span><span class="special">;</span>
77    <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">allocator_const_pointer</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">const_pointer</span><span class="special">;</span>
78    <span class="comment">// ...</span>
79<span class="special">};</span>
80</pre>
81<p>
82        In C++11 or above, aliases such as <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">allocator_pointer_t</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;</span></code>
83        can be used instead of <code class="computeroutput"><span class="keyword">typename</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">allocator_pointer</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;::</span><span class="identifier">type</span></code>.
84      </p>
85</div>
86<div class="section">
87<div class="titlepage"><div><div><h3 class="title">
88<a name="core.allocator_access.reference"></a><a class="link" href="allocator_access.html#core.allocator_access.reference" title="Reference">Reference</a>
89</h3></div></div></div>
90<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
91
92<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span>
93<span class="keyword">struct</span> <span class="identifier">allocator_value_type</span><span class="special">;</span>
94
95<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span>
96<span class="keyword">using</span> <span class="identifier">allocator_value_type_t</span> <span class="special">=</span> <span class="keyword">typename</span> <span class="identifier">allocator_value_type</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">;</span>
97
98<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span>
99<span class="keyword">struct</span> <span class="identifier">allocator_pointer</span><span class="special">;</span>
100
101<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span>
102<span class="keyword">using</span> <span class="identifier">allocator_pointer_t</span> <span class="special">=</span> <span class="keyword">typename</span> <span class="identifier">allocator_pointer</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">;</span>
103
104<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span>
105<span class="keyword">struct</span> <span class="identifier">allocator_const_pointer</span><span class="special">;</span>
106
107<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span>
108<span class="keyword">using</span> <span class="identifier">allocator_const_pointer_t</span> <span class="special">=</span> <span class="keyword">typename</span> <span class="identifier">allocator_const_pointer</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">;</span>
109
110<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span>
111<span class="keyword">struct</span> <span class="identifier">allocator_void_pointer</span><span class="special">;</span>
112
113<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span>
114<span class="keyword">using</span> <span class="identifier">allocator_void_pointer_t</span> <span class="special">=</span> <span class="keyword">typename</span> <span class="identifier">allocator_void_pointer</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">;</span>
115
116<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span>
117<span class="keyword">struct</span> <span class="identifier">allocator_const_void_pointer</span><span class="special">;</span>
118
119<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span>
120<span class="keyword">using</span> <span class="identifier">allocator_const_void_pointer_t</span> <span class="special">=</span>
121    <span class="keyword">typename</span> <span class="identifier">allocator_const_void_pointer</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">;</span>
122
123<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span>
124<span class="keyword">struct</span> <span class="identifier">allocator_difference_type</span><span class="special">;</span>
125
126<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span>
127<span class="keyword">using</span> <span class="identifier">allocator_difference_type_t</span> <span class="special">=</span>
128    <span class="keyword">typename</span> <span class="identifier">allocator_difference_type</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">;</span>
129
130<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span>
131<span class="keyword">struct</span> <span class="identifier">allocator_size_type</span><span class="special">;</span>
132
133<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span>
134<span class="keyword">using</span> <span class="identifier">allocator_size_type_t</span> <span class="special">=</span> <span class="keyword">typename</span> <span class="identifier">allocator_size_type</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">;</span>
135
136<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span>
137<span class="keyword">struct</span> <span class="identifier">allocator_propagate_on_container_copy_assignment</span><span class="special">;</span>
138
139<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span>
140<span class="keyword">using</span> <span class="identifier">allocator_propagate_on_container_copy_assignment_t</span> <span class="special">=</span>
141    <span class="keyword">typename</span> <span class="identifier">allocator_propagate_on_container_copy_assignment</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">;</span>
142
143<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span>
144<span class="keyword">struct</span> <span class="identifier">allocator_propagate_on_container_move_assignment</span><span class="special">;</span>
145
146<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span>
147<span class="keyword">using</span> <span class="identifier">allocator_propagate_on_container_move_assignment_t</span> <span class="special">=</span>
148    <span class="keyword">typename</span> <span class="identifier">allocator_propagate_on_container_move_assignment</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">;</span>
149
150<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span>
151<span class="keyword">struct</span> <span class="identifier">allocator_propagate_on_container_swap</span><span class="special">;</span>
152
153<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span>
154<span class="keyword">using</span> <span class="identifier">allocator_propagate_on_container_swap_t</span> <span class="special">=</span>
155    <span class="keyword">typename</span> <span class="identifier">allocator_propagate_on_container_swap</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">;</span>
156
157<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span>
158<span class="keyword">struct</span> <span class="identifier">allocator_is_always_equal</span><span class="special">;</span>
159
160<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span>
161<span class="keyword">using</span> <span class="identifier">allocator_is_always_equal_t</span> <span class="special">=</span>
162    <span class="keyword">typename</span> <span class="identifier">allocator_is_always_equal</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">;</span>
163
164<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
165<span class="keyword">struct</span> <span class="identifier">allocator_rebind</span><span class="special">;</span>
166
167<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
168<span class="keyword">using</span> <span class="identifier">allocator_rebind_t</span> <span class="special">=</span> <span class="keyword">typename</span> <span class="identifier">allocator_rebind</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">,</span> <span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">;</span>
169
170<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span>
171<span class="identifier">allocator_pointer_t</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;</span> <span class="identifier">allocator_allocate</span><span class="special">(</span><span class="identifier">A</span><span class="special">&amp;</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">allocator_size_type_t</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;</span> <span class="identifier">n</span><span class="special">);</span>
172
173<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span>
174<span class="identifier">allocator_pointer_t</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;</span> <span class="identifier">allocator_allocate</span><span class="special">(</span><span class="identifier">A</span><span class="special">&amp;</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">allocator_size_type_t</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;</span> <span class="identifier">n</span><span class="special">,</span>
175    <span class="identifier">allocator_const_void_pointer_t</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;</span> <span class="identifier">h</span><span class="special">);</span>
176
177<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span>
178<span class="keyword">void</span> <span class="identifier">allocator_deallocate</span><span class="special">(</span><span class="identifier">A</span><span class="special">&amp;</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">allocator_pointer_t</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;</span> <span class="identifier">p</span><span class="special">,</span>
179    <span class="identifier">allocator_size_type_t</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;</span> <span class="identifier">n</span><span class="special">);</span>
180
181<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">&gt;</span>
182<span class="keyword">void</span> <span class="identifier">allocator_construct</span><span class="special">(</span><span class="identifier">A</span><span class="special">&amp;</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">T</span><span class="special">*</span> <span class="identifier">p</span><span class="special">,</span> <span class="identifier">Args</span><span class="special">&amp;&amp;...</span> <span class="identifier">args</span><span class="special">);</span>
183
184<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
185<span class="keyword">void</span> <span class="identifier">allocator_destroy</span><span class="special">(</span><span class="identifier">A</span><span class="special">&amp;</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">T</span><span class="special">*</span> <span class="identifier">p</span><span class="special">);</span>
186
187<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span>
188<span class="identifier">allocator_size_type_t</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;</span> <span class="identifier">allocator_max_size</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">A</span><span class="special">&amp;</span> <span class="identifier">a</span><span class="special">);</span>
189
190<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span>
191<span class="identifier">A</span> <span class="identifier">allocator_select_on_container_copy_construction</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">A</span><span class="special">&amp;</span> <span class="identifier">a</span><span class="special">);</span>
192
193<span class="special">}</span> <span class="comment">// boost</span>
194</pre>
195<div class="section">
196<div class="titlepage"><div><div><h4 class="title">
197<a name="core.allocator_access.reference.types"></a><a class="link" href="allocator_access.html#core.allocator_access.reference.types" title="Types">Types</a>
198</h4></div></div></div>
199<div class="variablelist">
200<p class="title"><b></b></p>
201<dl class="variablelist">
202<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span> <span class="keyword">struct</span>
203            <span class="identifier">allocator_value_type</span><span class="special">;</span></code></span></dt>
204<dd><p>
205                The member <code class="computeroutput"><span class="identifier">type</span></code> is
206                <code class="computeroutput"><span class="identifier">A</span><span class="special">::</span><span class="identifier">value_type</span></code>.
207              </p></dd>
208<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span> <span class="keyword">struct</span>
209            <span class="identifier">allocator_pointer</span><span class="special">;</span></code></span></dt>
210<dd><p>
211                The member <code class="computeroutput"><span class="identifier">type</span></code> is
212                <code class="computeroutput"><span class="identifier">A</span><span class="special">::</span><span class="identifier">pointer</span></code> if valid, otherwise <code class="computeroutput"><span class="identifier">A</span><span class="special">::</span><span class="identifier">value_type</span><span class="special">*</span></code>.
213              </p></dd>
214<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span> <span class="keyword">struct</span>
215            <span class="identifier">allocator_const_pointer</span><span class="special">;</span></code></span></dt>
216<dd><p>
217                The member <code class="computeroutput"><span class="identifier">type</span></code> is
218                <code class="computeroutput"><span class="identifier">A</span><span class="special">::</span><span class="identifier">const_pointer</span></code> if valid, otherwise
219                <code class="computeroutput"><span class="identifier">pointer_traits</span><span class="special">&lt;</span><span class="identifier">allocator_pointer_t</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;</span>
220                <span class="special">&gt;::</span><span class="identifier">rebind</span><span class="special">&lt;</span><span class="keyword">const</span>
221                <span class="identifier">allocator_value_type_t</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;</span> <span class="special">&gt;</span></code>.
222              </p></dd>
223<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span> <span class="keyword">struct</span>
224            <span class="identifier">allocator_void_pointer</span><span class="special">;</span></code></span></dt>
225<dd><p>
226                The member <code class="computeroutput"><span class="identifier">type</span></code> is
227                <code class="computeroutput"><span class="identifier">A</span><span class="special">::</span><span class="identifier">void_pointer</span></code> if valid, otherwise
228                <code class="computeroutput"><span class="identifier">pointer_traits</span><span class="special">&lt;</span><span class="identifier">allocator_pointer_t</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;</span>
229                <span class="special">&gt;::</span><span class="identifier">rebind</span><span class="special">&lt;</span><span class="keyword">void</span><span class="special">&gt;</span></code>.
230              </p></dd>
231<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span> <span class="keyword">struct</span>
232            <span class="identifier">allocator_const_void_pointer</span><span class="special">;</span></code></span></dt>
233<dd><p>
234                The member <code class="computeroutput"><span class="identifier">type</span></code> is
235                <code class="computeroutput"><span class="identifier">A</span><span class="special">::</span><span class="identifier">const_void_pointer</span></code> if valid, otherwise
236                <code class="computeroutput"><span class="identifier">pointer_traits</span><span class="special">&lt;</span><span class="identifier">allocator_pointer_t</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;</span>
237                <span class="special">&gt;::</span><span class="identifier">rebind</span><span class="special">&lt;</span><span class="keyword">const</span>
238                <span class="keyword">void</span><span class="special">&gt;</span></code>.
239              </p></dd>
240<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span> <span class="keyword">struct</span>
241            <span class="identifier">allocator_difference_type</span><span class="special">;</span></code></span></dt>
242<dd><p>
243                The member <code class="computeroutput"><span class="identifier">type</span></code> is
244                <code class="computeroutput"><span class="identifier">A</span><span class="special">::</span><span class="identifier">difference_type</span></code> if valid, otherwise
245                <code class="computeroutput"><span class="identifier">pointer_traits</span><span class="special">&lt;</span><span class="identifier">allocator_pointer_t</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;</span>
246                <span class="special">&gt;::</span><span class="identifier">difference_type</span></code>.
247              </p></dd>
248<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span> <span class="keyword">struct</span>
249            <span class="identifier">allocator_size_type</span><span class="special">;</span></code></span></dt>
250<dd><p>
251                The member <code class="computeroutput"><span class="identifier">type</span></code> is
252                <code class="computeroutput"><span class="identifier">A</span><span class="special">::</span><span class="identifier">size_type</span></code> if valid, otherwise
253                <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">make_unsigned_t</span><span class="special">&lt;</span><span class="identifier">allocator_difference_type_t</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;</span>
254                <span class="special">&gt;</span></code>.
255              </p></dd>
256<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span> <span class="keyword">struct</span>
257            <span class="identifier">allocator_propagate_on_container_copy_assignment</span><span class="special">;</span></code></span></dt>
258<dd><p>
259                The member <code class="computeroutput"><span class="identifier">type</span></code> is
260                <code class="computeroutput"><span class="identifier">A</span><span class="special">::</span><span class="identifier">propagate_on_container_copy_assignment</span></code>
261                if valid, otherwise <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">false_type</span></code>.
262              </p></dd>
263<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span> <span class="keyword">struct</span>
264            <span class="identifier">allocator_propagate_on_container_move_assignment</span><span class="special">;</span></code></span></dt>
265<dd><p>
266                The member <code class="computeroutput"><span class="identifier">type</span></code> is
267                <code class="computeroutput"><span class="identifier">A</span><span class="special">::</span><span class="identifier">propagate_on_container_move_assignment</span></code>
268                if valid, otherwise <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">false_type</span></code>.
269              </p></dd>
270<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span> <span class="keyword">struct</span>
271            <span class="identifier">allocator_propagate_on_container_swap</span><span class="special">;</span></code></span></dt>
272<dd><p>
273                The member <code class="computeroutput"><span class="identifier">type</span></code> is
274                <code class="computeroutput"><span class="identifier">A</span><span class="special">::</span><span class="identifier">propagate_on_container_swap</span></code> if
275                valid, otherwise <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">false_type</span></code>.
276              </p></dd>
277<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span> <span class="keyword">struct</span>
278            <span class="identifier">allocator_is_always_equal</span><span class="special">;</span></code></span></dt>
279<dd><p>
280                The member <code class="computeroutput"><span class="identifier">type</span></code> is
281                <code class="computeroutput"><span class="identifier">A</span><span class="special">::</span><span class="identifier">is_always_equal</span></code> if valid, otherwise
282                <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">is_empty</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;::</span><span class="identifier">type</span></code>.
283              </p></dd>
284<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">allocator_rebind</span><span class="special">;</span></code></span></dt>
285<dd><p>
286                The member <code class="computeroutput"><span class="identifier">type</span></code> is
287                <code class="computeroutput"><span class="identifier">A</span><span class="special">::</span><span class="identifier">rebind</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">other</span></code> if valid, otherwise <code class="computeroutput"><span class="identifier">A</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">Args</span><span class="special">&gt;</span></code>
288                if this <code class="computeroutput"><span class="identifier">A</span></code> is <code class="computeroutput"><span class="identifier">A</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">,</span> <span class="identifier">Args</span><span class="special">&gt;</span></code>.
289              </p></dd>
290</dl>
291</div>
292</div>
293<div class="section">
294<div class="titlepage"><div><div><h4 class="title">
295<a name="core.allocator_access.reference.functions"></a><a class="link" href="allocator_access.html#core.allocator_access.reference.functions" title="Functions">Functions</a>
296</h4></div></div></div>
297<div class="variablelist">
298<p class="title"><b></b></p>
299<dl class="variablelist">
300<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span> <span class="identifier">allocator_pointer_t</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;</span> <span class="identifier">allocator_allocate</span><span class="special">(</span><span class="identifier">A</span><span class="special">&amp;</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">allocator_size_type_t</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;</span> <span class="identifier">n</span><span class="special">);</span></code></span></dt>
301<dd><p>
302                Calls <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">allocate</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span></code>.
303              </p></dd>
304<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span> <span class="identifier">allocator_pointer_t</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;</span> <span class="identifier">allocator_allocate</span><span class="special">(</span><span class="identifier">A</span><span class="special">&amp;</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">allocator_size_type_t</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;</span> <span class="identifier">n</span><span class="special">,</span> <span class="identifier">allocator_const_void_pointer_t</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;</span> <span class="identifier">hint</span><span class="special">);</span></code></span></dt>
305<dd><p>
306                Calls <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">allocate</span><span class="special">(</span><span class="identifier">n</span><span class="special">,</span> <span class="identifier">hint</span><span class="special">)</span></code>
307                if valid, otherwise calls <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">allocate</span><span class="special">(</span><span class="identifier">n</span><span class="special">)</span></code>.
308              </p></dd>
309<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span> <span class="keyword">void</span> <span class="identifier">allocator_deallocate</span><span class="special">(</span><span class="identifier">A</span><span class="special">&amp;</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">allocator_pointer_t</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;</span> <span class="identifier">p</span><span class="special">,</span> <span class="identifier">allocator_size_type_t</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;</span> <span class="identifier">n</span><span class="special">);</span></code></span></dt>
310<dd><p>
311                Calls <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">deallocate</span><span class="special">(</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">n</span><span class="special">)</span></code>.
312              </p></dd>
313<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">&gt;</span>
314            <span class="keyword">void</span> <span class="identifier">allocator_construct</span><span class="special">(</span><span class="identifier">A</span><span class="special">&amp;</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">T</span><span class="special">*</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">Args</span><span class="special">&amp;&amp;...</span> <span class="identifier">args</span><span class="special">);</span></code></span></dt>
315<dd><p>
316                Calls <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">construct</span><span class="special">(</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">forward</span><span class="special">&lt;</span><span class="identifier">Args</span><span class="special">&gt;(</span><span class="identifier">args</span><span class="special">)...)</span></code>
317                if valid, otherwise calls <code class="computeroutput"><span class="special">::</span><span class="keyword">new</span><span class="special">(</span><span class="keyword">static_cast</span><span class="special">&lt;</span><span class="keyword">void</span><span class="special">*&gt;(</span><span class="identifier">p</span><span class="special">))</span> <span class="identifier">T</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">forward</span><span class="special">&lt;</span><span class="identifier">Args</span><span class="special">&gt;(</span><span class="identifier">args</span><span class="special">)...)</span></code>.
318              </p></dd>
319<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">void</span> <span class="identifier">allocator_destroy</span><span class="special">(</span><span class="identifier">A</span><span class="special">&amp;</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">T</span><span class="special">*</span> <span class="identifier">p</span><span class="special">);</span></code></span></dt>
320<dd><p>
321                Calls <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">destroy</span><span class="special">(</span><span class="identifier">p</span><span class="special">)</span></code>
322                if valid, otherwise calls <code class="computeroutput"><span class="identifier">p</span><span class="special">-&gt;~</span><span class="identifier">T</span><span class="special">()</span></code>.
323              </p></dd>
324<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span> <span class="identifier">allocator_size_type_t</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;</span> <span class="identifier">allocator_max_size</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">A</span><span class="special">&amp;</span> <span class="identifier">a</span><span class="special">);</span></code></span></dt>
325<dd><p>
326                Returns <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">max_size</span><span class="special">()</span></code>
327                if valid, otherwise returns <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span><span class="special">&lt;</span><span class="identifier">allocator_size_type_t</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;</span> <span class="special">&gt;::</span><span class="identifier">max</span><span class="special">()</span>
328                <span class="special">/</span> <span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">A</span><span class="special">::</span><span class="identifier">value_type</span><span class="special">)</span></code>.
329              </p></dd>
330<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">&gt;</span> <span class="identifier">A</span> <span class="identifier">allocator_select_on_container_copy_construction</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">A</span><span class="special">&amp;</span> <span class="identifier">a</span><span class="special">);</span></code></span></dt>
331<dd><p>
332                Returns <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><span class="identifier">select_on_container_copy_construction</span><span class="special">()</span></code> if valid, otherwise returns <code class="computeroutput"><span class="identifier">a</span></code>.
333              </p></dd>
334</dl>
335</div>
336</div>
337</div>
338<div class="section">
339<div class="titlepage"><div><div><h3 class="title">
340<a name="core.allocator_access.acknowledgments"></a><a class="link" href="allocator_access.html#core.allocator_access.acknowledgments" title="Acknowledgments">Acknowledgments</a>
341</h3></div></div></div>
342<p>
343        Glen Fernandes implemented the allocator access utilities.
344      </p>
345</div>
346</div>
347<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
348<td align="left"></td>
349<td align="right"><div class="copyright-footer">Copyright © 2014 Peter Dimov<br>Copyright © 2014 Glen Fernandes<br>Copyright © 2014 Andrey Semashev<p>
350        Distributed under the <a href="http://boost.org/LICENSE_1_0.txt" target="_top">Boost
351        Software License, Version 1.0</a>.
352      </p>
353</div></td>
354</tr></table>
355<hr>
356<div class="spirit-nav">
357<a accesskey="p" href="addressof.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="alloc_construct.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
358</div>
359</body>
360</html>
361