1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 2<html> 3<head> 4<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 5<title>Reference</title> 6<link rel="stylesheet" href="../../../doc/src/boostbook.css" type="text/css"> 7<meta name="generator" content="DocBook XSL Stylesheets V1.79.1"> 8<link rel="home" href="../index.html" title="The Boost C++ Libraries BoostBook Documentation Subset"> 9<link rel="up" href="../align.html" title="Chapter 3. Boost.Align"> 10<link rel="prev" href="examples.html" title="Examples"> 11<link rel="next" href="vocabulary.html" title="Vocabulary"> 12</head> 13<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> 14<table cellpadding="2" width="100%"><tr> 15<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td> 16<td align="center"><a href="../../../index.html">Home</a></td> 17<td align="center"><a href="../../../libs/libraries.htm">Libraries</a></td> 18<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> 19<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> 20<td align="center"><a href="../../../more/index.htm">More</a></td> 21</tr></table> 22<hr> 23<div class="spirit-nav"> 24<a accesskey="p" href="examples.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../align.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="vocabulary.html"><img src="../../../doc/src/images/next.png" alt="Next"></a> 25</div> 26<div class="section"> 27<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 28<a name="align.reference"></a><a class="link" href="reference.html" title="Reference">Reference</a> 29</h2></div></div></div> 30<div class="toc"><dl class="toc"> 31<dt><span class="section"><a href="reference.html#align.reference.functions">Functions</a></span></dt> 32<dt><span class="section"><a href="reference.html#align.reference.classes">Classes</a></span></dt> 33<dt><span class="section"><a href="reference.html#align.reference.traits">Traits</a></span></dt> 34<dt><span class="section"><a href="reference.html#align.reference.macros">Macros</a></span></dt> 35</dl></div> 36<div class="section"> 37<div class="titlepage"><div><div><h3 class="title"> 38<a name="align.reference.functions"></a><a class="link" href="reference.html#align.reference.functions" title="Functions">Functions</a> 39</h3></div></div></div> 40<div class="toc"><dl class="toc"> 41<dt><span class="section"><a href="reference.html#align.reference.functions.align">align</a></span></dt> 42<dt><span class="section"><a href="reference.html#align.reference.functions.align_up">align_up</a></span></dt> 43<dt><span class="section"><a href="reference.html#align.reference.functions.align_down">align_down</a></span></dt> 44<dt><span class="section"><a href="reference.html#align.reference.functions.aligned_alloc">aligned_alloc</a></span></dt> 45<dt><span class="section"><a href="reference.html#align.reference.functions.aligned_free">aligned_free</a></span></dt> 46<dt><span class="section"><a href="reference.html#align.reference.functions.is_aligned">is_aligned</a></span></dt> 47</dl></div> 48<div class="section"> 49<div class="titlepage"><div><div><h4 class="title"> 50<a name="align.reference.functions.align"></a><a class="link" href="reference.html#align.reference.functions.align" title="align">align</a> 51</h4></div></div></div> 52<div class="variablelist"> 53<p class="title"><b></b></p> 54<dl class="variablelist"> 55<dt><span class="term"><code class="computeroutput"><span class="keyword">void</span><span class="special">*</span> 56 <span class="identifier">align</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">alignment</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> 57 <span class="identifier">size</span><span class="special">,</span> 58 <span class="keyword">void</span><span class="special">*&</span> 59 <span class="identifier">ptr</span><span class="special">,</span> 60 <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">&</span> 61 <span class="identifier">space</span><span class="special">);</span></code></span></dt> 62<dd><div class="variablelist"> 63<p class="title"><b></b></p> 64<dl class="variablelist"> 65<dt><span class="term">Header</span></dt> 66<dd><p> 67 <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">align</span><span class="special">/</span><span class="identifier">align</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> 68 </p></dd> 69<dt><span class="term">Effects</span></dt> 70<dd><p> 71 If it is possible to fit <code class="computeroutput"><span class="identifier">size</span></code> 72 bytes of storage aligned by <code class="computeroutput"><span class="identifier">alignment</span></code> 73 into the buffer pointed to by <code class="computeroutput"><span class="identifier">ptr</span></code> 74 with length <code class="computeroutput"><span class="identifier">space</span></code>, 75 the function updates <code class="computeroutput"><span class="identifier">ptr</span></code> 76 to point to the first possible address of such storage and 77 decreases <code class="computeroutput"><span class="identifier">space</span></code> 78 by the number of bytes used for alignment. Otherwise, the function 79 does nothing. 80 </p></dd> 81<dt><span class="term">Requires</span></dt> 82<dd><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 83<li class="listitem"> 84 <code class="computeroutput"><span class="identifier">alignment</span></code> 85 shall be a power of two 86 </li> 87<li class="listitem"> 88 <code class="computeroutput"><span class="identifier">ptr</span></code> shall 89 point to contiguous storage of at least <code class="computeroutput"><span class="identifier">space</span></code> 90 bytes 91 </li> 92</ul></div></dd> 93<dt><span class="term">Returns</span></dt> 94<dd> 95 A null pointer if the requested aligned buffer would not fit 96 into the available space, otherwise the adjusted value of 97 <code class="computeroutput"><span class="identifier">ptr</span></code>. 98 </dd> 99<dt><span class="term">Note</span></dt> 100<dd><p> 101 The function updates its <code class="computeroutput"><span class="identifier">ptr</span></code> 102 and <code class="computeroutput"><span class="identifier">space</span></code> arguments 103 so that it can be called repeatedly with possibly different 104 <code class="computeroutput"><span class="identifier">alignment</span></code> and 105 <code class="computeroutput"><span class="identifier">size</span></code>arguments 106 for the same buffer. 107 </p></dd> 108</dl> 109</div></dd> 110</dl> 111</div> 112</div> 113<div class="section"> 114<div class="titlepage"><div><div><h4 class="title"> 115<a name="align.reference.functions.align_up"></a><a class="link" href="reference.html#align.reference.functions.align_up" title="align_up">align_up</a> 116</h4></div></div></div> 117<div class="variablelist"> 118<p class="title"><b></b></p> 119<dl class="variablelist"> 120<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">constexpr</span> 121 <span class="identifier">T</span> <span class="identifier">align_up</span><span class="special">(</span><span class="identifier">T</span> <span class="identifier">value</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">alignment</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span></code></span></dt> 122<dd><div class="variablelist"> 123<p class="title"><b></b></p> 124<dl class="variablelist"> 125<dt><span class="term">Header</span></dt> 126<dd><p> 127 <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">align</span><span class="special">/</span><span class="identifier">align_up</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> 128 </p></dd> 129<dt><span class="term">Constraints</span></dt> 130<dd><p> 131 <code class="computeroutput"><span class="identifier">T</span></code> is not a 132 pointer type 133 </p></dd> 134<dt><span class="term">Requires</span></dt> 135<dd><p> 136 <code class="computeroutput"><span class="identifier">alignment</span></code> shall 137 be a power of two 138 </p></dd> 139<dt><span class="term">Returns</span></dt> 140<dd><p> 141 A value at or after <code class="computeroutput"><span class="identifier">value</span></code> 142 that is a multiple of <code class="computeroutput"><span class="identifier">alignment</span></code>. 143 </p></dd> 144</dl> 145</div></dd> 146</dl> 147</div> 148</div> 149<div class="section"> 150<div class="titlepage"><div><div><h4 class="title"> 151<a name="align.reference.functions.align_down"></a><a class="link" href="reference.html#align.reference.functions.align_down" title="align_down">align_down</a> 152</h4></div></div></div> 153<div class="variablelist"> 154<p class="title"><b></b></p> 155<dl class="variablelist"> 156<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">constexpr</span> 157 <span class="identifier">T</span> <span class="identifier">align_down</span><span class="special">(</span><span class="identifier">T</span> <span class="identifier">value</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">alignment</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span></code></span></dt> 158<dd><div class="variablelist"> 159<p class="title"><b></b></p> 160<dl class="variablelist"> 161<dt><span class="term">Header</span></dt> 162<dd><p> 163 <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">align</span><span class="special">/</span><span class="identifier">align_down</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> 164 </p></dd> 165<dt><span class="term">Constraints</span></dt> 166<dd><p> 167 <code class="computeroutput"><span class="identifier">T</span></code> is not a 168 pointer type 169 </p></dd> 170<dt><span class="term">Requires</span></dt> 171<dd><p> 172 <code class="computeroutput"><span class="identifier">alignment</span></code> shall 173 be a power of two 174 </p></dd> 175<dt><span class="term">Returns</span></dt> 176<dd><p> 177 A value at or before <code class="computeroutput"><span class="identifier">value</span></code> 178 that is a multiple of <code class="computeroutput"><span class="identifier">alignment</span></code>. 179 </p></dd> 180</dl> 181</div></dd> 182</dl> 183</div> 184</div> 185<div class="section"> 186<div class="titlepage"><div><div><h4 class="title"> 187<a name="align.reference.functions.aligned_alloc"></a><a class="link" href="reference.html#align.reference.functions.aligned_alloc" title="aligned_alloc">aligned_alloc</a> 188</h4></div></div></div> 189<div class="variablelist"> 190<p class="title"><b></b></p> 191<dl class="variablelist"> 192<dt><span class="term"><code class="computeroutput"><span class="keyword">void</span><span class="special">*</span> 193 <span class="identifier">aligned_alloc</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">alignment</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> 194 <span class="identifier">size</span><span class="special">);</span></code></span></dt> 195<dd><div class="variablelist"> 196<p class="title"><b></b></p> 197<dl class="variablelist"> 198<dt><span class="term">Header</span></dt> 199<dd><p> 200 <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">align</span><span class="special">/</span><span class="identifier">aligned_alloc</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> 201 </p></dd> 202<dt><span class="term">Effects</span></dt> 203<dd><p> 204 Allocates space for an object whose alignment is specified 205 by <code class="computeroutput"><span class="identifier">alignment</span></code>, 206 whose size is specified by <code class="computeroutput"><span class="identifier">size</span></code>, 207 and whose value is indeterminate. 208 </p></dd> 209<dt><span class="term">Requires</span></dt> 210<dd><p> 211 <code class="computeroutput"><span class="identifier">alignment</span></code> shall 212 be a power of two. 213 </p></dd> 214<dt><span class="term">Returns</span></dt> 215<dd><p> 216 A null pointer or a pointer to the allocated space. 217 </p></dd> 218<dt><span class="term">Note</span></dt> 219<dd><p> 220 On certain platforms, the space allocated may be slightly larger 221 than <code class="computeroutput"><span class="identifier">size</span></code> bytes, 222 to allow for alignment. 223 </p></dd> 224</dl> 225</div></dd> 226</dl> 227</div> 228</div> 229<div class="section"> 230<div class="titlepage"><div><div><h4 class="title"> 231<a name="align.reference.functions.aligned_free"></a><a class="link" href="reference.html#align.reference.functions.aligned_free" title="aligned_free">aligned_free</a> 232</h4></div></div></div> 233<div class="variablelist"> 234<p class="title"><b></b></p> 235<dl class="variablelist"> 236<dt><span class="term"><code class="computeroutput"><span class="keyword">void</span> <span class="identifier">aligned_free</span><span class="special">(</span><span class="keyword">void</span><span class="special">*</span> <span class="identifier">ptr</span><span class="special">);</span></code></span></dt> 237<dd><div class="variablelist"> 238<p class="title"><b></b></p> 239<dl class="variablelist"> 240<dt><span class="term">Header</span></dt> 241<dd><p> 242 <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">align</span><span class="special">/</span><span class="identifier">aligned_alloc</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> 243 </p></dd> 244<dt><span class="term">Effects</span></dt> 245<dd><p> 246 Causes the space pointed to by <code class="computeroutput"><span class="identifier">ptr</span></code> 247 to be deallocated, that is, made available for further allocation. 248 If <code class="computeroutput"><span class="identifier">ptr</span></code> is a 249 null pointer, no action occurs. Otherwise, if the argument 250 does not match a pointer earlier returned by the <code class="computeroutput"><span class="identifier">aligned_alloc</span><span class="special">()</span></code> 251 function, or if the space has been deallocated by a call to 252 <code class="computeroutput"><span class="identifier">aligned_free</span><span class="special">()</span></code>, the behavior is undefined. 253 </p></dd> 254<dt><span class="term">Requires</span></dt> 255<dd><p> 256 <code class="computeroutput"><span class="identifier">ptr</span></code> is a null 257 pointer or a pointer earlier returned by the <code class="computeroutput"><span class="identifier">aligned_alloc</span><span class="special">()</span></code> 258 function that has not been deallocated by a call to <code class="computeroutput"><span class="identifier">aligned_free</span><span class="special">()</span></code>. 259 </p></dd> 260<dt><span class="term">Returns</span></dt> 261<dd><p> 262 The <code class="computeroutput"><span class="identifier">aligned_free</span><span class="special">()</span></code> function returns no value. 263 </p></dd> 264</dl> 265</div></dd> 266</dl> 267</div> 268</div> 269<div class="section"> 270<div class="titlepage"><div><div><h4 class="title"> 271<a name="align.reference.functions.is_aligned"></a><a class="link" href="reference.html#align.reference.functions.is_aligned" title="is_aligned">is_aligned</a> 272</h4></div></div></div> 273<div class="variablelist"> 274<p class="title"><b></b></p> 275<dl class="variablelist"> 276<dt><span class="term"><code class="computeroutput"><span class="keyword">bool</span> <span class="identifier">is_aligned</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">volatile</span> <span class="keyword">void</span><span class="special">*</span> <span class="identifier">ptr</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> 277 <span class="identifier">alignment</span><span class="special">)</span> 278 <span class="keyword">noexcept</span><span class="special">;</span></code></span></dt> 279<dd><div class="variablelist"> 280<p class="title"><b></b></p> 281<dl class="variablelist"> 282<dt><span class="term">Header</span></dt> 283<dd><p> 284 <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">align</span><span class="special">/</span><span class="identifier">is_aligned</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> 285 </p></dd> 286<dt><span class="term">Requires</span></dt> 287<dd><p> 288 <code class="computeroutput"><span class="identifier">alignment</span></code> shall 289 be a power of two. 290 </p></dd> 291<dt><span class="term">Returns</span></dt> 292<dd><p> 293 <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">ptr</span></code> is aligned on the boundary 294 specified by <code class="computeroutput"><span class="identifier">alignment</span></code>, 295 otherwise <code class="computeroutput"><span class="keyword">false</span></code>. 296 </p></dd> 297</dl> 298</div></dd> 299<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">constexpr</span> 300 <span class="keyword">bool</span> <span class="identifier">is_aligned</span><span class="special">(</span><span class="identifier">T</span> <span class="identifier">value</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">alignment</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span></code></span></dt> 301<dd><div class="variablelist"> 302<p class="title"><b></b></p> 303<dl class="variablelist"> 304<dt><span class="term">Header</span></dt> 305<dd><p> 306 <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">align</span><span class="special">/</span><span class="identifier">is_aligned</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> 307 </p></dd> 308<dt><span class="term">Constraints</span></dt> 309<dd><p> 310 <code class="computeroutput"><span class="identifier">T</span></code> is not a 311 pointer type 312 </p></dd> 313<dt><span class="term">Requires</span></dt> 314<dd><p> 315 <code class="computeroutput"><span class="identifier">alignment</span></code> shall 316 be a power of two. 317 </p></dd> 318<dt><span class="term">Returns</span></dt> 319<dd><p> 320 <code class="computeroutput"><span class="keyword">true</span></code> if the value 321 of <code class="computeroutput"><span class="identifier">value</span></code> is 322 aligned on the boundary specified by <code class="computeroutput"><span class="identifier">alignment</span></code>, 323 otherwise <code class="computeroutput"><span class="keyword">false</span></code>. 324 </p></dd> 325</dl> 326</div></dd> 327</dl> 328</div> 329</div> 330</div> 331<div class="section"> 332<div class="titlepage"><div><div><h3 class="title"> 333<a name="align.reference.classes"></a><a class="link" href="reference.html#align.reference.classes" title="Classes">Classes</a> 334</h3></div></div></div> 335<div class="toc"><dl class="toc"> 336<dt><span class="section"><a href="reference.html#align.reference.classes.aligned_allocator">aligned_allocator</a></span></dt> 337<dt><span class="section"><a href="reference.html#align.reference.classes.aligned_allocator_adaptor">aligned_allocator_adaptor</a></span></dt> 338<dt><span class="section"><a href="reference.html#align.reference.classes.aligned_delete">aligned_delete</a></span></dt> 339</dl></div> 340<div class="section"> 341<div class="titlepage"><div><div><h4 class="title"> 342<a name="align.reference.classes.aligned_allocator"></a><a class="link" href="reference.html#align.reference.classes.aligned_allocator" title="aligned_allocator">aligned_allocator</a> 343</h4></div></div></div> 344<div class="variablelist"> 345<p class="title"><b></b></p> 346<dl class="variablelist"> 347<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> 348 <span class="identifier">Alignment</span> <span class="special">=</span> 349 <span class="number">1</span><span class="special">></span> 350 <span class="keyword">class</span> <span class="identifier">aligned_allocator</span><span class="special">;</span></code></span></dt> 351<dd><div class="variablelist"> 352<p class="title"><b></b></p> 353<dl class="variablelist"> 354<dt><span class="term">Header</span></dt> 355<dd><p> 356 <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">align</span><span class="special">/</span><span class="identifier">aligned_allocator</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> 357 </p></dd> 358<dt><span class="term">Note</span></dt> 359<dd><p> 360 Using the aligned allocator with a minimum Alignment value 361 is generally only useful with containers that are not node-based 362 such as <code class="computeroutput"><span class="identifier">vector</span></code>. 363 With node-based containers, such as <code class="computeroutput"><span class="identifier">list</span></code>, 364 the node object would have the minimum alignment instead of 365 the value type object. 366 </p></dd> 367</dl> 368</div></dd> 369</dl> 370</div> 371<h6> 372<a name="align.reference.classes.aligned_allocator.h0"></a> 373 <span class="phrase"><a name="align.reference.classes.aligned_allocator.member_types"></a></span><a class="link" href="reference.html#align.reference.classes.aligned_allocator.member_types">Member 374 types</a> 375 </h6> 376<div class="orderedlist"><ol class="orderedlist" type="1"> 377<li class="listitem"> 378 <code class="computeroutput"><span class="keyword">typedef</span> <span class="identifier">T</span> 379 <span class="identifier">value_type</span><span class="special">;</span></code> 380 </li> 381<li class="listitem"> 382 <code class="computeroutput"><span class="keyword">typedef</span> <span class="identifier">T</span><span class="special">*</span> <span class="identifier">pointer</span><span class="special">;</span></code> 383 </li> 384<li class="listitem"> 385 <code class="computeroutput"><span class="keyword">typedef</span> <span class="keyword">const</span> 386 <span class="identifier">T</span><span class="special">*</span> 387 <span class="identifier">const_pointer</span><span class="special">;</span></code> 388 </li> 389<li class="listitem"> 390 <code class="computeroutput"><span class="keyword">typedef</span> <span class="keyword">void</span><span class="special">*</span> <span class="identifier">void_pointer</span><span class="special">;</span></code> 391 </li> 392<li class="listitem"> 393 <code class="computeroutput"><span class="keyword">typedef</span> <span class="keyword">const</span> 394 <span class="keyword">void</span><span class="special">*</span> 395 <span class="identifier">const_void_pointer</span><span class="special">;</span></code> 396 </li> 397<li class="listitem"> 398 <code class="computeroutput"><span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">add_lvalue_reference_t</span><span class="special"><</span><span class="identifier">T</span><span class="special">></span> <span class="identifier">reference</span><span class="special">;</span></code> 399 </li> 400<li class="listitem"> 401 <code class="computeroutput"><span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">add_lvalue_reference_t</span><span class="special"><</span><span class="keyword">const</span> 402 <span class="identifier">T</span><span class="special">></span> 403 <span class="identifier">const_reference</span><span class="special">;</span></code> 404 </li> 405<li class="listitem"> 406 <code class="computeroutput"><span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> 407 <span class="identifier">size_type</span><span class="special">;</span></code> 408 </li> 409<li class="listitem"> 410 <code class="computeroutput"><span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">ptrdiff_t</span> 411 <span class="identifier">difference_type</span><span class="special">;</span></code> 412 </li> 413<li class="listitem"> 414 <code class="computeroutput"><span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">true_type</span> 415 <span class="identifier">propagate_on_container_move_assignment</span><span class="special">;</span></code> 416 </li> 417<li class="listitem"> 418 <code class="computeroutput"><span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">true_type</span> 419 <span class="identifier">is_always_equal</span><span class="special">;</span></code> 420 </li> 421<li class="listitem"> 422 <code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> <span class="keyword">struct</span> 423 <span class="identifier">rebind</span> <span class="special">{</span> 424 <span class="keyword">typedef</span> <span class="identifier">aligned_allocator</span><span class="special"><</span><span class="identifier">U</span><span class="special">,</span> <span class="identifier">Alignment</span><span class="special">></span> <span class="identifier">other</span><span class="special">;</span> <span class="special">};</span></code> 425 </li> 426</ol></div> 427<h6> 428<a name="align.reference.classes.aligned_allocator.h1"></a> 429 <span class="phrase"><a name="align.reference.classes.aligned_allocator.constructors"></a></span><a class="link" href="reference.html#align.reference.classes.aligned_allocator.constructors">Constructors</a> 430 </h6> 431<div class="variablelist"> 432<p class="title"><b></b></p> 433<dl class="variablelist"> 434<dt><span class="term"><code class="computeroutput"><span class="identifier">aligned_allocator</span><span class="special">()</span> <span class="special">=</span> <span class="keyword">default</span><span class="special">;</span></code></span></dt> 435<dd><div class="variablelist"> 436<p class="title"><b></b></p> 437<dl class="variablelist"> 438<dt><span class="term">Effects</span></dt> 439<dd><p> 440 Constructs the allocator. 441 </p></dd> 442</dl> 443</div></dd> 444<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> <span class="identifier">aligned_allocator</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">aligned_allocator</span><span class="special"><</span><span class="identifier">U</span><span class="special">,</span> <span class="identifier">Alignment</span><span class="special">>&)</span> 445 <span class="keyword">noexcept</span><span class="special">;</span></code></span></dt> 446<dd><div class="variablelist"> 447<p class="title"><b></b></p> 448<dl class="variablelist"> 449<dt><span class="term">Effects</span></dt> 450<dd><p> 451 Constructs the allocator. 452 </p></dd> 453</dl> 454</div></dd> 455</dl> 456</div> 457<h6> 458<a name="align.reference.classes.aligned_allocator.h2"></a> 459 <span class="phrase"><a name="align.reference.classes.aligned_allocator.member_functions"></a></span><a class="link" href="reference.html#align.reference.classes.aligned_allocator.member_functions">Member 460 functions</a> 461 </h6> 462<p> 463 Except for the destructor, member functions of the aligned allocator shall 464 not introduce data races as a result of concurrent calls to those member 465 functions from different threads. Calls to these functions that allocate 466 or deallocate a particular unit of storage shall occur in a single total 467 order, and each such deallocation call shall happen before the next allocation 468 (if any) in this order. 469 </p> 470<div class="variablelist"> 471<p class="title"><b></b></p> 472<dl class="variablelist"> 473<dt><span class="term"><code class="computeroutput"><span class="identifier">pointer</span> <span class="identifier">allocate</span><span class="special">(</span><span class="identifier">size_type</span> 474 <span class="identifier">size</span><span class="special">,</span> 475 <span class="identifier">const_void_pointer</span> <span class="special">=</span> 476 <span class="number">0</span><span class="special">);</span></code></span></dt> 477<dd><div class="variablelist"> 478<p class="title"><b></b></p> 479<dl class="variablelist"> 480<dt><span class="term">Returns</span></dt> 481<dd><p> 482 A pointer to the initial element of an array of storage of 483 size <code class="computeroutput"><span class="identifier">n</span> <span class="special">*</span> 484 <span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">T</span><span class="special">)</span></code>, 485 aligned on the maximum of the minimum alignment specified and 486 the alignment of objects of type <code class="computeroutput"><span class="identifier">T</span></code>. 487 </p></dd> 488<dt><span class="term">Remark</span></dt> 489<dd><p> 490 The storage is obtained by calling <code class="computeroutput"><span class="identifier">aligned_alloc</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span><span class="special">)</span></code>. 491 </p></dd> 492<dt><span class="term">Throws</span></dt> 493<dd><p> 494 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">bad_alloc</span></code> if the storage 495 cannot be obtained. 496 </p></dd> 497</dl> 498</div></dd> 499<dt><span class="term"><code class="computeroutput"><span class="keyword">void</span> <span class="identifier">deallocate</span><span class="special">(</span><span class="identifier">pointer</span> 500 <span class="identifier">ptr</span><span class="special">,</span> 501 <span class="identifier">size_type</span><span class="special">);</span></code></span></dt> 502<dd><div class="variablelist"> 503<p class="title"><b></b></p> 504<dl class="variablelist"> 505<dt><span class="term">Requires</span></dt> 506<dd><p> 507 <code class="computeroutput"><span class="identifier">ptr</span></code> shall be 508 a pointer value obtained from <code class="computeroutput"><span class="identifier">allocate</span><span class="special">()</span></code>. 509 </p></dd> 510<dt><span class="term">Effects</span></dt> 511<dd><p> 512 Deallocates the storage referenced by <code class="computeroutput"><span class="identifier">ptr</span></code>. 513 </p></dd> 514<dt><span class="term">Remark</span></dt> 515<dd><p> 516 Uses <code class="computeroutput"><span class="identifier">aligned_free</span><span class="special">(</span><span class="keyword">void</span><span class="special">*)</span></code>. 517 </p></dd> 518</dl> 519</div></dd> 520<dt><span class="term"><code class="computeroutput"><span class="identifier">size_type</span> <span class="identifier">max_size</span><span class="special">()</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span></code></span></dt> 521<dd><div class="variablelist"> 522<p class="title"><b></b></p> 523<dl class="variablelist"> 524<dt><span class="term">Returns</span></dt> 525<dd><p> 526 The largest value <code class="computeroutput"><span class="identifier">N</span></code> 527 for which the call <code class="computeroutput"><span class="identifier">allocate</span><span class="special">(</span><span class="identifier">N</span><span class="special">)</span></code> might succeed. 528 </p></dd> 529</dl> 530</div></dd> 531<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Args</span><span class="special">></span> <span class="keyword">void</span> <span class="identifier">construct</span><span class="special">(</span><span class="identifier">U</span><span class="special">*</span> <span class="identifier">ptr</span><span class="special">,</span> <span class="identifier">Args</span><span class="special">&&...</span> 532 <span class="identifier">args</span><span class="special">);</span></code></span></dt> 533<dd><div class="variablelist"> 534<p class="title"><b></b></p> 535<dl class="variablelist"> 536<dt><span class="term">Effects</span></dt> 537<dd><p> 538 <code class="computeroutput"><span class="special">::</span><span class="keyword">new</span><span class="special">((</span><span class="keyword">void</span><span class="special">*)</span><span class="identifier">ptr</span><span class="special">)</span> <span class="identifier">U</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">forward</span><span class="special"><</span><span class="identifier">Args</span><span class="special">>(</span><span class="identifier">args</span><span class="special">)...)</span></code>. 539 </p></dd> 540</dl> 541</div></dd> 542<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> <span class="keyword">void</span> <span class="identifier">destroy</span><span class="special">(</span><span class="identifier">U</span><span class="special">*</span> <span class="identifier">ptr</span><span class="special">);</span></code></span></dt> 543<dd><div class="variablelist"> 544<p class="title"><b></b></p> 545<dl class="variablelist"> 546<dt><span class="term">Effects</span></dt> 547<dd><p> 548 <code class="computeroutput"><span class="identifier">ptr</span><span class="special">->~</span><span class="identifier">U</span><span class="special">()</span></code>. 549 </p></dd> 550</dl> 551</div></dd> 552</dl> 553</div> 554<h6> 555<a name="align.reference.classes.aligned_allocator.h3"></a> 556 <span class="phrase"><a name="align.reference.classes.aligned_allocator.global_operators"></a></span><a class="link" href="reference.html#align.reference.classes.aligned_allocator.global_operators">Global 557 operators</a> 558 </h6> 559<div class="variablelist"> 560<p class="title"><b></b></p> 561<dl class="variablelist"> 562<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T2</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">Alignment</span><span class="special">></span> <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span><span class="keyword">const</span> <span class="identifier">aligned_allocator</span><span class="special"><</span><span class="identifier">T1</span><span class="special">,</span> <span class="identifier">Alignment</span><span class="special">>&,</span> <span class="keyword">const</span> 563 <span class="identifier">aligned_allocator</span><span class="special"><</span><span class="identifier">T2</span><span class="special">,</span> <span class="identifier">Alignment</span><span class="special">>&)</span> 564 <span class="keyword">noexcept</span><span class="special">;</span></code></span></dt> 565<dd><div class="variablelist"> 566<p class="title"><b></b></p> 567<dl class="variablelist"> 568<dt><span class="term">Returns</span></dt> 569<dd><p> 570 <code class="computeroutput"><span class="keyword">true</span></code> 571 </p></dd> 572</dl> 573</div></dd> 574<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T2</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">Alignment</span><span class="special">></span> <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=(</span><span class="keyword">const</span> <span class="identifier">aligned_allocator</span><span class="special"><</span><span class="identifier">T1</span><span class="special">,</span> <span class="identifier">Alignment</span><span class="special">>&,</span> <span class="keyword">const</span> 575 <span class="identifier">aligned_allocator</span><span class="special"><</span><span class="identifier">T2</span><span class="special">,</span> <span class="identifier">Alignment</span><span class="special">>&)</span> 576 <span class="keyword">noexcept</span><span class="special">;</span></code></span></dt> 577<dd><div class="variablelist"> 578<p class="title"><b></b></p> 579<dl class="variablelist"> 580<dt><span class="term">Returns</span></dt> 581<dd><p> 582 <code class="computeroutput"><span class="keyword">false</span></code> 583 </p></dd> 584</dl> 585</div></dd> 586</dl> 587</div> 588</div> 589<div class="section"> 590<div class="titlepage"><div><div><h4 class="title"> 591<a name="align.reference.classes.aligned_allocator_adaptor"></a><a class="link" href="reference.html#align.reference.classes.aligned_allocator_adaptor" title="aligned_allocator_adaptor">aligned_allocator_adaptor</a> 592</h4></div></div></div> 593<div class="variablelist"> 594<p class="title"><b></b></p> 595<dl class="variablelist"> 596<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> 597 <span class="identifier">Alignment</span> <span class="special">=</span> 598 <span class="number">1</span><span class="special">></span> 599 <span class="keyword">class</span> <span class="identifier">aligned_allocator_adaptor</span><span class="special">;</span></code></span></dt> 600<dd><div class="variablelist"> 601<p class="title"><b></b></p> 602<dl class="variablelist"> 603<dt><span class="term">Header</span></dt> 604<dd><p> 605 <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">align</span><span class="special">/</span><span class="identifier">aligned_allocator_adaptor</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> 606 </p></dd> 607<dt><span class="term">Note</span></dt> 608<dd><p> 609 This adaptor can be used with a C++11 Allocator whose pointer 610 type is a smart pointer but the adaptor can choose to expose 611 only raw pointer types. 612 </p></dd> 613</dl> 614</div></dd> 615</dl> 616</div> 617<h6> 618<a name="align.reference.classes.aligned_allocator_adaptor.h0"></a> 619 <span class="phrase"><a name="align.reference.classes.aligned_allocator_adaptor.member_types"></a></span><a class="link" href="reference.html#align.reference.classes.aligned_allocator_adaptor.member_types">Member 620 types</a> 621 </h6> 622<div class="orderedlist"><ol class="orderedlist" type="1"> 623<li class="listitem"> 624 <code class="computeroutput"><span class="keyword">typedef</span> <span class="keyword">typename</span> 625 <span class="identifier">Allocator</span><span class="special">::</span><span class="identifier">value_type</span> <span class="identifier">value_type</span><span class="special">;</span></code> 626 </li> 627<li class="listitem"> 628 <code class="computeroutput"><span class="keyword">typedef</span> <span class="identifier">value_type</span><span class="special">*</span> <span class="identifier">pointer</span><span class="special">;</span></code> 629 </li> 630<li class="listitem"> 631 <code class="computeroutput"><span class="keyword">typedef</span> <span class="keyword">const</span> 632 <span class="identifier">value_type</span><span class="special">*</span> 633 <span class="identifier">const_pointer</span><span class="special">;</span></code> 634 </li> 635<li class="listitem"> 636 <code class="computeroutput"><span class="keyword">typedef</span> <span class="keyword">void</span><span class="special">*</span> <span class="identifier">void_pointer</span><span class="special">;</span></code> 637 </li> 638<li class="listitem"> 639 <code class="computeroutput"><span class="keyword">typedef</span> <span class="keyword">const</span> 640 <span class="keyword">void</span><span class="special">*</span> 641 <span class="identifier">const_void_pointer</span><span class="special">;</span></code> 642 </li> 643<li class="listitem"> 644 <code class="computeroutput"><span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> 645 <span class="identifier">size_type</span><span class="special">;</span></code> 646 </li> 647<li class="listitem"> 648 <code class="computeroutput"><span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">ptrdiff_t</span> 649 <span class="identifier">difference_type</span><span class="special">;</span></code> 650 </li> 651<li class="listitem"> 652 <code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> <span class="keyword">struct</span> 653 <span class="identifier">rebind</span> <span class="special">{</span> 654 <span class="keyword">typedef</span> <span class="identifier">aligned_allocator_adaptor</span><span class="special"><</span><span class="keyword">typename</span> 655 <span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator_traits</span><span class="special"><</span><span class="identifier">Allocator</span><span class="special">>::</span><span class="keyword">template</span> <span class="identifier">rebind_alloc</span><span class="special"><</span><span class="identifier">U</span><span class="special">>,</span> <span class="identifier">Alignment</span><span class="special">></span> <span class="identifier">other</span><span class="special">;</span> <span class="special">};</span></code> 656 </li> 657</ol></div> 658<h6> 659<a name="align.reference.classes.aligned_allocator_adaptor.h1"></a> 660 <span class="phrase"><a name="align.reference.classes.aligned_allocator_adaptor.constructors"></a></span><a class="link" href="reference.html#align.reference.classes.aligned_allocator_adaptor.constructors">Constructors</a> 661 </h6> 662<div class="variablelist"> 663<p class="title"><b></b></p> 664<dl class="variablelist"> 665<dt><span class="term"><code class="computeroutput"><span class="identifier">aligned_allocator_adaptor</span><span class="special">()</span> <span class="special">=</span> <span class="keyword">default</span><span class="special">;</span></code></span></dt> 666<dd><div class="variablelist"> 667<p class="title"><b></b></p> 668<dl class="variablelist"> 669<dt><span class="term">Effects</span></dt> 670<dd><p> 671 Value-initializes the <code class="computeroutput"><span class="identifier">Allocator</span></code> 672 base class. 673 </p></dd> 674</dl> 675</div></dd> 676<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">></span> <span class="identifier">aligned_allocator_adaptor</span><span class="special">(</span><span class="identifier">A</span><span class="special">&&</span> <span class="identifier">alloc</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span></code></span></dt> 677<dd><div class="variablelist"> 678<p class="title"><b></b></p> 679<dl class="variablelist"> 680<dt><span class="term">Requires</span></dt> 681<dd><p> 682 <code class="computeroutput"><span class="identifier">Allocator</span></code> shall 683 be constructible from <code class="computeroutput"><span class="identifier">A</span></code>. 684 </p></dd> 685<dt><span class="term">Effects</span></dt> 686<dd><p> 687 Initializes the <code class="computeroutput"><span class="identifier">Allocator</span></code> 688 base class with <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">forward</span><span class="special"><</span><span class="identifier">A</span><span class="special">>(</span><span class="identifier">alloc</span><span class="special">)</span></code>. 689 </p></dd> 690</dl> 691</div></dd> 692<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> <span class="identifier">aligned_allocator_adaptor</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">aligned_allocator_adaptor</span><span class="special"><</span><span class="identifier">U</span><span class="special">,</span> <span class="identifier">Alignment</span><span class="special">>&</span> 693 <span class="identifier">other</span><span class="special">)</span> 694 <span class="keyword">noexcept</span><span class="special">;</span></code></span></dt> 695<dd><div class="variablelist"> 696<p class="title"><b></b></p> 697<dl class="variablelist"> 698<dt><span class="term">Requires</span></dt> 699<dd><p> 700 <code class="computeroutput"><span class="identifier">Allocator</span></code> shall 701 be constructible from <code class="computeroutput"><span class="identifier">A</span></code>. 702 </p></dd> 703<dt><span class="term">Effects</span></dt> 704<dd><p> 705 Initializes the <code class="computeroutput"><span class="identifier">Allocator</span></code> 706 base class with <code class="computeroutput"><span class="identifier">other</span><span class="special">.</span><span class="identifier">base</span><span class="special">()</span></code>. 707 </p></dd> 708</dl> 709</div></dd> 710</dl> 711</div> 712<h6> 713<a name="align.reference.classes.aligned_allocator_adaptor.h2"></a> 714 <span class="phrase"><a name="align.reference.classes.aligned_allocator_adaptor.member_functions"></a></span><a class="link" href="reference.html#align.reference.classes.aligned_allocator_adaptor.member_functions">Member 715 functions</a> 716 </h6> 717<div class="variablelist"> 718<p class="title"><b></b></p> 719<dl class="variablelist"> 720<dt><span class="term"><code class="computeroutput"><span class="identifier">Allocator</span><span class="special">&</span> 721 <span class="identifier">base</span><span class="special">()</span> 722 <span class="keyword">noexcept</span><span class="special">;</span></code></span></dt> 723<dd><div class="variablelist"> 724<p class="title"><b></b></p> 725<dl class="variablelist"> 726<dt><span class="term">Returns</span></dt> 727<dd><p> 728 <code class="computeroutput"><span class="keyword">static_cast</span><span class="special"><</span><span class="identifier">Allocator</span><span class="special">&>(*</span><span class="keyword">this</span><span class="special">)</span></code> 729 </p></dd> 730</dl> 731</div></dd> 732<dt><span class="term"><code class="computeroutput"><span class="keyword">const</span> <span class="identifier">Allocator</span><span class="special">&</span> <span class="identifier">base</span><span class="special">()</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span></code></span></dt> 733<dd><div class="variablelist"> 734<p class="title"><b></b></p> 735<dl class="variablelist"> 736<dt><span class="term">Returns</span></dt> 737<dd><p> 738 <code class="computeroutput"><span class="keyword">static_cast</span><span class="special"><</span><span class="keyword">const</span> <span class="identifier">Allocator</span><span class="special">&>(*</span><span class="keyword">this</span><span class="special">)</span></code> 739 </p></dd> 740</dl> 741</div></dd> 742<dt><span class="term"><code class="computeroutput"><span class="identifier">pointer</span> <span class="identifier">allocate</span><span class="special">(</span><span class="identifier">size_type</span> 743 <span class="identifier">size</span><span class="special">);</span></code></span></dt> 744<dd><div class="variablelist"> 745<p class="title"><b></b></p> 746<dl class="variablelist"> 747<dt><span class="term">Returns</span></dt> 748<dd><p> 749 A pointer to the initial element of an array of storage of 750 size <code class="computeroutput"><span class="identifier">n</span> <span class="special">*</span> 751 <span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">value_type</span><span class="special">)</span></code>, 752 aligned on the maximum of the minimum alignment specified and 753 the alignment of objects of type <code class="computeroutput"><span class="identifier">value_type</span></code>. 754 </p></dd> 755<dt><span class="term">Remark</span></dt> 756<dd><p> 757 The storage is obtained by calling <code class="computeroutput"><span class="identifier">A2</span><span class="special">::</span><span class="identifier">allocate</span><span class="special">()</span></code> on an object <code class="computeroutput"><span class="identifier">a2</span></code>, where <code class="computeroutput"><span class="identifier">a2</span></code> 758 of type <code class="computeroutput"><span class="identifier">A2</span></code> 759 is a rebound copy of <code class="computeroutput"><span class="identifier">base</span><span class="special">()</span></code> where its <code class="computeroutput"><span class="identifier">value_type</span></code> 760 is implementation defined. 761 </p></dd> 762<dt><span class="term">Throws</span></dt> 763<dd><p> 764 Throws an exception thrown from <code class="computeroutput"><span class="identifier">A2</span><span class="special">::</span><span class="identifier">allocate</span><span class="special">()</span></code> if the storage cannot be 765 obtained. 766 </p></dd> 767</dl> 768</div></dd> 769<dt><span class="term"><code class="computeroutput"><span class="identifier">pointer</span> <span class="identifier">allocate</span><span class="special">(</span><span class="identifier">size_type</span> 770 <span class="identifier">size</span><span class="special">,</span> 771 <span class="identifier">const_void_pointer</span> <span class="identifier">hint</span><span class="special">);</span></code></span></dt> 772<dd><div class="variablelist"> 773<p class="title"><b></b></p> 774<dl class="variablelist"> 775<dt><span class="term">Requires</span></dt> 776<dd><p> 777 <code class="computeroutput"><span class="identifier">hint</span></code> is a value 778 obtained by calling <code class="computeroutput"><span class="identifier">allocate</span><span class="special">()</span></code> on any equivalent allocator 779 object, or else a null pointer. 780 </p></dd> 781<dt><span class="term">Returns</span></dt> 782<dd><p> 783 A pointer to the initial element of an array of storage of 784 size <code class="computeroutput"><span class="identifier">n</span> <span class="special">*</span> 785 <span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">value_type</span><span class="special">)</span></code>, 786 aligned on the maximum of the minimum alignment specified and 787 the alignment of objects of type <code class="computeroutput"><span class="identifier">value_type</span></code>. 788 </p></dd> 789<dt><span class="term">Remark</span></dt> 790<dd><p> 791 The storage is obtained by calling <code class="computeroutput"><span class="identifier">A2</span><span class="special">::</span><span class="identifier">allocate</span><span class="special">()</span></code> on an object <code class="computeroutput"><span class="identifier">a2</span></code>, where <code class="computeroutput"><span class="identifier">a2</span></code> 792 of type <code class="computeroutput"><span class="identifier">A2</span></code> 793 is a rebound copy of <code class="computeroutput"><span class="identifier">base</span><span class="special">()</span></code> where its <code class="computeroutput"><span class="identifier">value_type</span></code> 794 is an implementation defined. 795 </p></dd> 796<dt><span class="term">Throws</span></dt> 797<dd><p> 798 Throws an exception thrown from <code class="computeroutput"><span class="identifier">A2</span><span class="special">::</span><span class="identifier">allocate</span><span class="special">()</span></code> if the storage cannot be 799 obtained. 800 </p></dd> 801</dl> 802</div></dd> 803<dt><span class="term"><code class="computeroutput"><span class="keyword">void</span> <span class="identifier">deallocate</span><span class="special">(</span><span class="identifier">pointer</span> 804 <span class="identifier">ptr</span><span class="special">,</span> 805 <span class="identifier">size_type</span> <span class="identifier">size</span><span class="special">);</span></code></span></dt> 806<dd><div class="variablelist"> 807<p class="title"><b></b></p> 808<dl class="variablelist"> 809<dt><span class="term">Requires</span></dt> 810<dd><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 811<li class="listitem"> 812 <code class="computeroutput"><span class="identifier">ptr</span></code> shall 813 be a pointer value obtained from <code class="computeroutput"><span class="identifier">allocate</span><span class="special">()</span></code> 814 </li> 815<li class="listitem"> 816 <code class="computeroutput"><span class="identifier">size</span></code> shall 817 equal the value passed as the first argument to the invocation 818 of <code class="computeroutput"><span class="identifier">allocate</span><span class="special">()</span></code> which returned <code class="computeroutput"><span class="identifier">ptr</span></code>. 819 </li> 820</ul></div></dd> 821<dt><span class="term">Effects</span></dt> 822<dd> 823 Deallocates the storage referenced by <code class="computeroutput"><span class="identifier">ptr</span></code>. 824 </dd> 825<dt><span class="term">Note</span></dt> 826<dd><p> 827 Uses <code class="computeroutput"><span class="identifier">A2</span><span class="special">::</span><span class="identifier">deallocate</span><span class="special">()</span></code> 828 on an object <code class="computeroutput"><span class="identifier">a2</span></code>, 829 where <code class="computeroutput"><span class="identifier">a2</span></code> of 830 type <code class="computeroutput"><span class="identifier">A2</span></code> is 831 a rebound copy of <code class="computeroutput"><span class="identifier">base</span><span class="special">()</span></code> where its <code class="computeroutput"><span class="identifier">value_type</span></code> 832 is implementation defined. 833 </p></dd> 834</dl> 835</div></dd> 836</dl> 837</div> 838<h6> 839<a name="align.reference.classes.aligned_allocator_adaptor.h3"></a> 840 <span class="phrase"><a name="align.reference.classes.aligned_allocator_adaptor.global_operators"></a></span><a class="link" href="reference.html#align.reference.classes.aligned_allocator_adaptor.global_operators">Global 841 operators</a> 842 </h6> 843<div class="variablelist"> 844<p class="title"><b></b></p> 845<dl class="variablelist"> 846<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">A1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A2</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">Alignment</span><span class="special">></span> <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span><span class="keyword">const</span> <span class="identifier">aligned_allocator_adaptor</span><span class="special"><</span><span class="identifier">A1</span><span class="special">,</span> <span class="identifier">Alignment</span><span class="special">>&</span> <span class="identifier">a1</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">aligned_allocator_adaptor</span><span class="special"><</span><span class="identifier">A2</span><span class="special">,</span> <span class="identifier">Alignment</span><span class="special">>&</span> 847 <span class="identifier">a2</span><span class="special">)</span> 848 <span class="keyword">noexcept</span><span class="special">;</span></code></span></dt> 849<dd><div class="variablelist"> 850<p class="title"><b></b></p> 851<dl class="variablelist"> 852<dt><span class="term">Returns</span></dt> 853<dd><p> 854 <code class="computeroutput"><span class="identifier">a1</span><span class="special">.</span><span class="identifier">base</span><span class="special">()</span> 855 <span class="special">==</span> <span class="identifier">a2</span><span class="special">.</span><span class="identifier">base</span><span class="special">()</span></code> 856 </p></dd> 857</dl> 858</div></dd> 859<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">A1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">A2</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">Alignment</span><span class="special">></span> <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=(</span><span class="keyword">const</span> <span class="identifier">aligned_allocator_adaptor</span><span class="special"><</span><span class="identifier">A1</span><span class="special">,</span> <span class="identifier">Alignment</span><span class="special">>&</span> <span class="identifier">a1</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">aligned_allocator_adaptor</span><span class="special"><</span><span class="identifier">A2</span><span class="special">,</span> <span class="identifier">Alignment</span><span class="special">>&</span> 860 <span class="identifier">a2</span><span class="special">)</span> 861 <span class="keyword">noexcept</span><span class="special">;</span></code></span></dt> 862<dd><div class="variablelist"> 863<p class="title"><b></b></p> 864<dl class="variablelist"> 865<dt><span class="term">Returns</span></dt> 866<dd><p> 867 <code class="computeroutput"><span class="special">!(</span><span class="identifier">a1</span> 868 <span class="special">==</span> <span class="identifier">a2</span><span class="special">)</span></code> 869 </p></dd> 870</dl> 871</div></dd> 872</dl> 873</div> 874</div> 875<div class="section"> 876<div class="titlepage"><div><div><h4 class="title"> 877<a name="align.reference.classes.aligned_delete"></a><a class="link" href="reference.html#align.reference.classes.aligned_delete" title="aligned_delete">aligned_delete</a> 878</h4></div></div></div> 879<div class="variablelist"> 880<p class="title"><b></b></p> 881<dl class="variablelist"> 882<dt><span class="term"><code class="computeroutput"><span class="keyword">class</span> <span class="identifier">aligned_delete</span><span class="special">;</span></code></span></dt> 883<dd><div class="variablelist"> 884<p class="title"><b></b></p> 885<dl class="variablelist"> 886<dt><span class="term">Header</span></dt> 887<dd><p> 888 <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">align</span><span class="special">/</span><span class="identifier">aligned_delete</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> 889 </p></dd> 890</dl> 891</div></dd> 892</dl> 893</div> 894<h6> 895<a name="align.reference.classes.aligned_delete.h0"></a> 896 <span class="phrase"><a name="align.reference.classes.aligned_delete.member_operators"></a></span><a class="link" href="reference.html#align.reference.classes.aligned_delete.member_operators">Member 897 operators</a> 898 </h6> 899<div class="variablelist"> 900<p class="title"><b></b></p> 901<dl class="variablelist"> 902<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">T</span><span class="special">*</span> <span class="identifier">ptr</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">(</span><span class="keyword">noexcept</span><span class="special">(</span><span class="identifier">ptr</span><span class="special">->~</span><span class="identifier">T</span><span class="special">()));</span></code></span></dt> 903<dd><div class="variablelist"> 904<p class="title"><b></b></p> 905<dl class="variablelist"> 906<dt><span class="term">Effects</span></dt> 907<dd><p> 908 Calls <code class="computeroutput"><span class="special">~</span><span class="identifier">T</span><span class="special">()</span></code> on <code class="computeroutput"><span class="identifier">ptr</span></code> 909 to destroy the object and then calls <code class="computeroutput"><span class="identifier">aligned_free</span><span class="special">()</span></code> on <code class="computeroutput"><span class="identifier">ptr</span></code> 910 to free the allocated memory. 911 </p></dd> 912<dt><span class="term">Note</span></dt> 913<dd><p> 914 If <code class="computeroutput"><span class="identifier">T</span></code> is an 915 incomplete type, the program is ill-formed. 916 </p></dd> 917</dl> 918</div></dd> 919</dl> 920</div> 921</div> 922</div> 923<div class="section"> 924<div class="titlepage"><div><div><h3 class="title"> 925<a name="align.reference.traits"></a><a class="link" href="reference.html#align.reference.traits" title="Traits">Traits</a> 926</h3></div></div></div> 927<div class="toc"><dl class="toc"><dt><span class="section"><a href="reference.html#align.reference.traits.alignment_of">alignment_of</a></span></dt></dl></div> 928<div class="section"> 929<div class="titlepage"><div><div><h4 class="title"> 930<a name="align.reference.traits.alignment_of"></a><a class="link" href="reference.html#align.reference.traits.alignment_of" title="alignment_of">alignment_of</a> 931</h4></div></div></div> 932<div class="variablelist"> 933<p class="title"><b></b></p> 934<dl class="variablelist"> 935<dt><span class="term"><code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">struct</span> 936 <span class="identifier">alignment_of</span><span class="special">;</span></code></span></dt> 937<dd><div class="variablelist"> 938<p class="title"><b></b></p> 939<dl class="variablelist"> 940<dt><span class="term">Header</span></dt> 941<dd><p> 942 <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">align</span><span class="special">/</span><span class="identifier">alignment_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> 943 </p></dd> 944<dt><span class="term">Value</span></dt> 945<dd><p> 946 The alignment requirement of the type <code class="computeroutput"><span class="identifier">T</span></code> 947 as an integral constant of type <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span></code>. 948 When <code class="computeroutput"><span class="identifier">T</span></code> is a 949 reference array type, the value shall be the alignment of the 950 referenced type. When <code class="computeroutput"><span class="identifier">T</span></code> 951 is an array type, the value shall be the alignment of the element 952 type. 953 </p></dd> 954<dt><span class="term">Requires</span></dt> 955<dd><p> 956 <code class="computeroutput"><span class="identifier">T</span></code> shall be 957 a complete object type, or an array thereof, or a reference 958 to one of those types. 959 </p></dd> 960</dl> 961</div></dd> 962</dl> 963</div> 964</div> 965</div> 966<div class="section"> 967<div class="titlepage"><div><div><h3 class="title"> 968<a name="align.reference.macros"></a><a class="link" href="reference.html#align.reference.macros" title="Macros">Macros</a> 969</h3></div></div></div> 970<div class="toc"><dl class="toc"><dt><span class="section"><a href="reference.html#align.reference.macros.boost_align_assume_aligned">BOOST_ALIGN_ASSUME_ALIGNED</a></span></dt></dl></div> 971<div class="section"> 972<div class="titlepage"><div><div><h4 class="title"> 973<a name="align.reference.macros.boost_align_assume_aligned"></a><a class="link" href="reference.html#align.reference.macros.boost_align_assume_aligned" title="BOOST_ALIGN_ASSUME_ALIGNED">BOOST_ALIGN_ASSUME_ALIGNED</a> 974</h4></div></div></div> 975<div class="variablelist"> 976<p class="title"><b></b></p> 977<dl class="variablelist"> 978<dt><span class="term"><code class="computeroutput"><span class="identifier">BOOST_ALIGN_ASSUME_ALIGNED</span><span class="special">(</span><span class="identifier">ptr</span><span class="special">,</span> <span class="identifier">alignment</span><span class="special">)</span></code></span></dt> 979<dd><div class="variablelist"> 980<p class="title"><b></b></p> 981<dl class="variablelist"> 982<dt><span class="term">Header</span></dt> 983<dd><p> 984 <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">align</span><span class="special">/</span><span class="identifier">assume_aligned</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> 985 </p></dd> 986<dt><span class="term">Requires</span></dt> 987<dd><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 988<li class="listitem"> 989 <code class="computeroutput"><span class="identifier">alignment</span></code> 990 shall be a power of two 991 </li> 992<li class="listitem"> 993 <code class="computeroutput"><span class="identifier">ptr</span></code> shall 994 be mutable 995 </li> 996</ul></div></dd> 997<dt><span class="term">Effects</span></dt> 998<dd> 999 <code class="computeroutput"><span class="identifier">ptr</span></code> may be 1000 modified in an implementation specific way to inform the compiler 1001 of its alignment. 1002 </dd> 1003</dl> 1004</div></dd> 1005</dl> 1006</div> 1007</div> 1008</div> 1009</div> 1010<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> 1011<td align="left"></td> 1012<td align="right"><div class="copyright-footer">Copyright © 2014-2017 Glen 1013 Joseph Fernandes<p> 1014 Distributed under the Boost Software License, Version 1.0. 1015 </p> 1016</div></td> 1017</tr></table> 1018<hr> 1019<div class="spirit-nav"> 1020<a accesskey="p" href="examples.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../align.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="vocabulary.html"><img src="../../../doc/src/images/next.png" alt="Next"></a> 1021</div> 1022</body> 1023</html> 1024