summaryrefslogtreecommitdiff
path: root/doc/html/align
diff options
context:
space:
mode:
Diffstat (limited to 'doc/html/align')
-rw-r--r--doc/html/align/acknowledgments.html36
-rw-r--r--doc/html/align/compatibility.html205
-rw-r--r--doc/html/align/examples.html255
-rw-r--r--doc/html/align/history.html46
-rw-r--r--doc/html/align/rationale.html156
-rw-r--r--doc/html/align/reference.html1771
-rw-r--r--doc/html/align/tutorial.html315
-rw-r--r--doc/html/align/vocabulary.html132
8 files changed, 1275 insertions, 1641 deletions
diff --git a/doc/html/align/acknowledgments.html b/doc/html/align/acknowledgments.html
index 7628805b2b..a7b3494951 100644
--- a/doc/html/align/acknowledgments.html
+++ b/doc/html/align/acknowledgments.html
@@ -28,17 +28,8 @@
<a name="align.acknowledgments"></a><a class="link" href="acknowledgments.html" title="Acknowledgments">Acknowledgments</a>
</h2></div></div></div>
<p>
- Glen Fernandes authored the library and contributed it to the Boost C++ library
- collection.
- </p>
-<h4>
-<a name="align.acknowledgments.h0"></a>
- <span class="phrase"><a name="align.acknowledgments.library_reviews"></a></span><a class="link" href="acknowledgments.html#align.acknowledgments.library_reviews">Library
- Reviews</a>
- </h4>
-<p>
- Thank you to the following developers who reviewed the design, code, examples,
- tests, or documentation.
+ Thank you to everyone who reviewed the design, code, examples, tests, or documentation,
+ including:
</p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
@@ -67,21 +58,26 @@
</li>
</ul></div>
<p>
- Thank you to Ahmed Charles who served as review manager for the formal review
- of the library.
+ Thank you to everyone who contributed a feature to the library, with code,
+ tests, or documentation:
</p>
-<h4>
-<a name="align.acknowledgments.h1"></a>
- <span class="phrase"><a name="align.acknowledgments.contributions"></a></span><a class="link" href="acknowledgments.html#align.acknowledgments.contributions">Contributions</a>
- </h4>
+<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ Joel Falcou
+ </li>
+<li class="listitem">
+ Charly Chevalier
+ </li>
+</ul></div>
<p>
- Thank you to Joel Falcou and Charly Chevalier for both your contribution and
- your patience.
+ Thank you to Ahmed Charles for serving as the review manager for the formal
+ review of the library.
</p>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2014-2016 Glen Joseph Fernandes<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2014-2017 Glen
+ Joseph Fernandes<p>
Distributed under the Boost Software License, Version 1.0.
</p>
</div></td>
diff --git a/doc/html/align/compatibility.html b/doc/html/align/compatibility.html
index 5f2cbe2828..4c06be06c8 100644
--- a/doc/html/align/compatibility.html
+++ b/doc/html/align/compatibility.html
@@ -28,189 +28,38 @@
<a name="align.compatibility"></a><a class="link" href="compatibility.html" title="Compatibility">Compatibility</a>
</h2></div></div></div>
<p>
- Boost.Align has been tested with GCC, Clang, Visual C++, and Intel C++, on
- Linux, Windows, and OS X. It supports any conforming C++11 or C++03 compilers.
+ This library has been tested with the following C++ implementations:
</p>
-<div class="table">
-<a name="align.compatibility.compilers_tested"></a><p class="title"><b>Table&#160;4.3.&#160;Compilers Tested</b></p>
-<div class="table-contents"><table class="table" summary="Compilers Tested">
-<colgroup>
-<col>
-<col>
-<col>
-<col>
-<col>
-<col>
-</colgroup>
-<thead><tr>
-<th>
- <p>
- Compiler
- </p>
- </th>
-<th>
- <p>
- Version
- </p>
- </th>
-<th>
- <p>
- Library
- </p>
- </th>
-<th>
- <p>
- Platform
- </p>
- </th>
-<th>
- <p>
- Hardware
- </p>
- </th>
-<th>
- <p>
- Standard
- </p>
- </th>
-</tr></thead>
-<tbody>
-<tr>
-<td>
- <p>
- clang
- </p>
- </td>
-<td>
- <p>
- 3.0 - 3.6
- </p>
- </td>
-<td>
- <p>
- libstdc++, libc++
- </p>
- </td>
-<td>
- <p>
- linux, darwin
- </p>
- </td>
-<td>
- <p>
- x86, x64
- </p>
- </td>
-<td>
- <p>
- c++11, c++03
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- gcc
- </p>
- </td>
-<td>
- <p>
- 4.4 - 5.1
- </p>
- </td>
-<td>
- <p>
- libstdc++
- </p>
- </td>
-<td>
- <p>
- linux, windows
- </p>
- </td>
-<td>
- <p>
- x86, x64, arm
- </p>
- </td>
-<td>
- <p>
- c++11, c++03
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- intel
- </p>
- </td>
-<td>
- <p>
- 11.1 - 15.0
- </p>
- </td>
-<td>
- <p>
- libstdc++
- </p>
- </td>
-<td>
- <p>
- linux
- </p>
- </td>
-<td>
- <p>
- x86, x64
- </p>
- </td>
-<td>
- <p>
- c++11, c++03
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- msvc
- </p>
- </td>
-<td>
- <p>
- 8.0 - 14.0
- </p>
- </td>
-<td>
- <p>
- dinkumware
- </p>
- </td>
-<td>
- <p>
- windows
- </p>
- </td>
-<td>
- <p>
- x86, x64
- </p>
- </td>
-<td>
- <p>
- default
- </p>
- </td>
-</tr>
-</tbody>
-</table></div>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Compilers</span></dt>
+<dd>
+ gcc, clang, msvc, intel
+ </dd>
+<dt><span class="term">Libraries</span></dt>
+<dd><p>
+ libstdc++, libc++, dinkumware
+ </p></dd>
+<dt><span class="term">Systems</span></dt>
+<dd><p>
+ linux, windows, osx
+ </p></dd>
+<dt><span class="term">Platforms</span></dt>
+<dd><p>
+ x64, x86, arm
+ </p></dd>
+<dt><span class="term">Standards</span></dt>
+<dd><p>
+ c++98, c++03, c++11, c++14
+ </p></dd>
+</dl>
</div>
-<br class="table-break">
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2014-2016 Glen Joseph Fernandes<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2014-2017 Glen
+ Joseph Fernandes<p>
Distributed under the Boost Software License, Version 1.0.
</p>
</div></td>
diff --git a/doc/html/align/examples.html b/doc/html/align/examples.html
index daa0e48afe..d2cd52321e 100644
--- a/doc/html/align/examples.html
+++ b/doc/html/align/examples.html
@@ -7,7 +7,7 @@
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
<link rel="home" href="../index.html" title="The Boost C++ Libraries BoostBook Documentation Subset">
<link rel="up" href="../align.html" title="Chapter&#160;4.&#160;Boost.Align">
-<link rel="prev" href="tutorial.html" title="Tutorial">
+<link rel="prev" href="rationale.html" title="Rationale">
<link rel="next" href="reference.html" title="Reference">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
@@ -21,122 +21,175 @@
</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="tutorial.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="reference.html"><img src="../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="rationale.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="reference.html"><img src="../../../doc/src/images/next.png" alt="Next"></a>
</div>
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="align.examples"></a><a class="link" href="examples.html" title="Examples">Examples</a>
</h2></div></div></div>
-<div class="toc"><dl class="toc">
-<dt><span class="section"><a href="examples.html#align.examples.aligned_ptr">aligned_ptr and make_aligned</a></span></dt>
-<dt><span class="section"><a href="examples.html#align.examples.aligned_vector">aligned_vector</a></span></dt>
-</dl></div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="align.examples.aligned_ptr"></a><a class="link" href="examples.html#align.examples.aligned_ptr" title="aligned_ptr and make_aligned">aligned_ptr and make_aligned</a>
-</h3></div></div></div>
+<h4>
+<a name="align.examples.h0"></a>
+ <span class="phrase"><a name="align.examples.aligned_allocation"></a></span><a class="link" href="examples.html#align.examples.aligned_allocation">Aligned
+ allocation</a>
+ </h4>
<p>
- This example presents an alternative to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">unique_ptr</span></code>
- for objects allocated with the aligned allocation function. It is defined
- simply by providing an alias template which uses <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">unique_ptr</span></code>
- with our aligned deleter in place of the default <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">default_delete</span></code>
- deleter. It also presents an alternative to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">make_unique</span></code>
- for the creation of these aligned unique pointer objects. It is implemented
- using our aligned allocation function.
- </p>
-<h5>
-<a name="align.examples.aligned_ptr.h0"></a>
- <span class="phrase"><a name="align.examples.aligned_ptr.implementation"></a></span><a class="link" href="examples.html#align.examples.aligned_ptr.implementation">Implementation</a>
- </h5>
-<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
-<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
-<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
-<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">memory</span><span class="special">&gt;</span>
-
-<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
-<span class="keyword">using</span> <span class="identifier">aligned_ptr</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">unique_ptr</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">,</span>
- <span class="identifier">boost</span><span class="special">::</span><span class="identifier">alignment</span><span class="special">::</span><span class="identifier">aligned_delete</span><span class="special">&gt;;</span>
-
-<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="special">...</span> <span class="identifier">Args</span><span class="special">&gt;</span>
-<span class="keyword">inline</span> <span class="identifier">aligned_ptr</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">make_aligned</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>
-<span class="special">{</span>
- <span class="keyword">auto</span> <span class="identifier">p</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">alignment</span><span class="special">::</span><span class="identifier">aligned_alloc</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span>
- <span class="identifier">alignment</span><span class="special">::</span><span class="identifier">alignment_of</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">,</span> <span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">T</span><span class="special">));</span>
- <span class="keyword">if</span> <span class="special">(!</span><span class="identifier">p</span><span class="special">)</span> <span class="special">{</span>
- <span class="keyword">throw</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">bad_alloc</span><span class="special">();</span>
- <span class="special">}</span>
- <span class="keyword">try</span> <span class="special">{</span>
- <span class="keyword">auto</span> <span class="identifier">q</span> <span class="special">=</span> <span class="special">::</span><span class="keyword">new</span><span class="special">(</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>
- <span class="keyword">return</span> <span class="identifier">aligned_ptr</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;(</span><span class="identifier">q</span><span class="special">);</span>
- <span class="special">}</span> <span class="keyword">catch</span> <span class="special">(...)</span> <span class="special">{</span>
- <span class="identifier">boost</span><span class="special">::</span><span class="identifier">alignment</span><span class="special">::</span><span class="identifier">aligned_free</span><span class="special">(</span><span class="identifier">p</span><span class="special">);</span>
- <span class="keyword">throw</span><span class="special">;</span>
- <span class="special">}</span>
-<span class="special">}</span>
-</pre>
-<h5>
-<a name="align.examples.aligned_ptr.h1"></a>
- <span class="phrase"><a name="align.examples.aligned_ptr.usage"></a></span><a class="link" href="examples.html#align.examples.aligned_ptr.usage">Usage</a>
- </h5>
-<pre class="programlisting"><span class="keyword">struct</span> <span class="keyword">alignas</span><span class="special">(</span><span class="number">16</span><span class="special">)</span> <span class="identifier">type</span> <span class="special">{</span>
- <span class="keyword">float</span> <span class="identifier">data</span><span class="special">[</span><span class="number">4</span><span class="special">];</span>
-<span class="special">};</span>
-
-<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
-<span class="special">{</span>
- <span class="keyword">auto</span> <span class="identifier">p</span> <span class="special">=</span> <span class="identifier">make_aligned</span><span class="special">&lt;</span><span class="identifier">type</span><span class="special">&gt;();</span>
- <span class="identifier">p</span><span class="special">.</span><span class="identifier">reset</span><span class="special">();</span>
-<span class="special">}</span>
-</pre>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="align.examples.aligned_vector"></a><a class="link" href="examples.html#align.examples.aligned_vector" title="aligned_vector">aligned_vector</a>
-</h3></div></div></div>
+ To dynamically allocate storage with desired alignment, you can use the <code class="computeroutput"><span class="identifier">aligned_alloc</span></code> function:
+ </p>
+<div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
+ <code class="computeroutput"><span class="keyword">void</span><span class="special">*</span>
+ <span class="identifier">storage</span> <span class="special">=</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">alignment</span><span class="special">::</span><span class="identifier">aligned_alloc</span><span class="special">(</span><span class="identifier">alignment</span><span class="special">,</span>
+ <span class="identifier">size</span><span class="special">);</span></code>
+ </li></ol></div>
<p>
- This example presents an alternative to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span></code>
- that can be used with over-aligned types, and allows specifying a minimum
- alignment. It is defined simply by providing an alias template which uses
- <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span></code> with our aligned allocator.
- </p>
-<h5>
-<a name="align.examples.aligned_vector.h0"></a>
- <span class="phrase"><a name="align.examples.aligned_vector.implementation"></a></span><a class="link" href="examples.html#align.examples.aligned_vector.implementation">Implementation</a>
- </h5>
-<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
-<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">vector</span><span class="special">&gt;</span>
-
-<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="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">Alignment</span> <span class="special">=</span> <span class="number">1</span><span class="special">&gt;</span>
-<span class="keyword">using</span> <span class="identifier">aligned_vector</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">,</span>
- <span class="identifier">boost</span><span class="special">::</span><span class="identifier">alignment</span><span class="special">::</span><span class="identifier">aligned_allocator</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">Alignment</span><span class="special">&gt;</span> <span class="special">&gt;;</span>
-</pre>
-<h5>
-<a name="align.examples.aligned_vector.h1"></a>
- <span class="phrase"><a name="align.examples.aligned_vector.usage"></a></span><a class="link" href="examples.html#align.examples.aligned_vector.usage">Usage</a>
- </h5>
-<pre class="programlisting"><span class="keyword">enum</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">cache_line</span> <span class="special">=</span> <span class="number">64</span>
-<span class="special">};</span>
-
-<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
-<span class="special">{</span>
- <span class="identifier">aligned_vector</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="identifier">cache_line</span><span class="special">&gt;</span> <span class="identifier">v</span><span class="special">;</span>
- <span class="identifier">v</span><span class="special">.</span><span class="identifier">emplace_back</span><span class="special">();</span>
-<span class="special">}</span>
-</pre>
-</div>
+ To deallocate storage allocated with the <code class="computeroutput"><span class="identifier">aligned_alloc</span></code>
+ function, use the <code class="computeroutput"><span class="identifier">aligned_free</span></code>
+ function:
+ </p>
+<div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
+ <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">alignment</span><span class="special">::</span><span class="identifier">aligned_free</span><span class="special">(</span><span class="identifier">storage</span><span class="special">);</span></code>
+ </li></ol></div>
+<h4>
+<a name="align.examples.h1"></a>
+ <span class="phrase"><a name="align.examples.aligned_allocator"></a></span><a class="link" href="examples.html#align.examples.aligned_allocator">Aligned
+ allocator</a>
+ </h4>
+<p>
+ For C++ allocator aware code, you can use the <code class="computeroutput"><span class="identifier">aligned_allocator</span></code>
+ class template for an allocator that respects over-alignment:
+ </p>
+<div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="identifier">int128_t</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">alignment</span><span class="special">::</span><span class="identifier">aligned_allocator</span><span class="special">&lt;</span><span class="identifier">int128_t</span><span class="special">&gt;</span>
+ <span class="special">&gt;</span> <span class="identifier">vector</span><span class="special">;</span></code>
+ </li></ol></div>
+<p>
+ This template allows specifying minimum alignment for all dynamic allocations:
+ </p>
+<div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">alignment</span><span class="special">::</span><span class="identifier">aligned_allocator</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">,</span> <span class="number">64</span><span class="special">&gt;</span> <span class="special">&gt;</span>
+ <span class="identifier">vector</span><span class="special">;</span></code>
+ </li></ol></div>
+<h4>
+<a name="align.examples.h2"></a>
+ <span class="phrase"><a name="align.examples.aligned_allocator_adaptor"></a></span><a class="link" href="examples.html#align.examples.aligned_allocator_adaptor">Aligned
+ allocator adaptor</a>
+ </h4>
+<p>
+ To turn an allocator into an allocator that respects over-alignment, you can
+ use the <code class="computeroutput"><span class="identifier">aligned_allocator_adaptor</span></code>
+ class template:
+ </p>
+<div class="orderedlist"><ol class="orderedlist" type="1">
+<li class="listitem">
+ <code class="computeroutput"><span class="identifier">Allocator</span><span class="special">&lt;</span><span class="identifier">int128_t</span><span class="special">&gt;</span>
+ <span class="identifier">first</span><span class="special">;</span></code>
+ </li>
+<li class="listitem">
+ <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">alignment</span><span class="special">::</span><span class="identifier">aligned_allocator_adaptor</span><span class="special">&lt;</span><span class="identifier">Allocator</span><span class="special">&lt;</span><span class="identifier">int128_t</span><span class="special">&gt;</span>
+ <span class="special">&gt;</span> <span class="identifier">second</span><span class="special">(</span><span class="identifier">first</span><span class="special">);</span></code>
+ </li>
+</ol></div>
+<p>
+ This template allows specifying minimum alignment for all dynamic allocations:
+ </p>
+<div class="orderedlist"><ol class="orderedlist" type="1">
+<li class="listitem">
+ <code class="computeroutput"><span class="identifier">Allocator</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">first</span><span class="special">;</span></code>
+ </li>
+<li class="listitem">
+ <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">alignment</span><span class="special">::</span><span class="identifier">aligned_allocator_adaptor</span><span class="special">&lt;</span><span class="identifier">Allocator</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;,</span> <span class="number">64</span><span class="special">&gt;</span> <span class="identifier">second</span><span class="special">(</span><span class="identifier">first</span><span class="special">);</span></code>
+ </li>
+</ol></div>
+<h4>
+<a name="align.examples.h3"></a>
+ <span class="phrase"><a name="align.examples.aligned_deleter"></a></span><a class="link" href="examples.html#align.examples.aligned_deleter">Aligned
+ deleter</a>
+ </h4>
+<p>
+ For a deleter that can be paired with <code class="computeroutput"><span class="identifier">aligned_alloc</span></code>,
+ you can use the <code class="computeroutput"><span class="identifier">aligned_delete</span></code>
+ class:
+ </p>
+<div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">unique_ptr</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">alignment</span><span class="special">::</span><span class="identifier">aligned_delete</span><span class="special">&gt;</span>
+ <span class="identifier">pointer</span><span class="special">;</span></code>
+ </li></ol></div>
+<h4>
+<a name="align.examples.h4"></a>
+ <span class="phrase"><a name="align.examples.pointer_alignment"></a></span><a class="link" href="examples.html#align.examples.pointer_alignment">Pointer
+ alignment</a>
+ </h4>
+<p>
+ To advance a pointer to the next address with the desired alignment:
+ </p>
+<div class="orderedlist"><ol class="orderedlist" type="1">
+<li class="listitem">
+ <code class="computeroutput"><span class="keyword">void</span><span class="special">*</span>
+ <span class="identifier">pointer</span> <span class="special">=</span>
+ <span class="identifier">storage</span><span class="special">;</span></code>
+ </li>
+<li class="listitem">
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">space</span>
+ <span class="special">=</span> <span class="identifier">size</span><span class="special">;</span></code>
+ </li>
+<li class="listitem">
+ <code class="computeroutput"><span class="keyword">void</span><span class="special">*</span>
+ <span class="identifier">result</span> <span class="special">=</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">alignment</span><span class="special">::</span><span class="identifier">align</span><span class="special">(</span><span class="number">64</span><span class="special">,</span> <span class="keyword">sizeof</span><span class="special">(</span><span class="keyword">double</span><span class="special">),</span> <span class="identifier">pointer</span><span class="special">,</span> <span class="identifier">space</span><span class="special">);</span></code>
+ </li>
+</ol></div>
+<h4>
+<a name="align.examples.h5"></a>
+ <span class="phrase"><a name="align.examples.querying_alignment"></a></span><a class="link" href="examples.html#align.examples.querying_alignment">Querying
+ alignment</a>
+ </h4>
+<p>
+ To obtain the alignment of a given type at compie time, you can use:
+ </p>
+<div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
+ <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">alignment</span><span class="special">::</span><span class="identifier">alignment_of</span><span class="special">&lt;</span><span class="identifier">int128_t</span><span class="special">&gt;::</span><span class="identifier">value</span></code>
+ </li></ol></div>
+<p>
+ If your compiler supports C++14 variable templates, you can also use:
+ </p>
+<div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
+ <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">alignment</span><span class="special">::</span><span class="identifier">alignment_of_v</span><span class="special">&lt;</span><span class="identifier">int128_t</span><span class="special">&gt;</span></code>
+ </li></ol></div>
+<h4>
+<a name="align.examples.h6"></a>
+ <span class="phrase"><a name="align.examples.hinting_alignment"></a></span><a class="link" href="examples.html#align.examples.hinting_alignment">Hinting
+ alignment</a>
+ </h4>
+<p>
+ To inform the compiler about the alignment of a pointer, you can use:
+ </p>
+<div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
+ <code class="computeroutput"><span class="identifier">BOOST_ALIGN_ASSUME_ALIGNED</span><span class="special">(</span><span class="identifier">pointer</span><span class="special">,</span> <span class="number">64</span><span class="special">)</span></code>
+ </li></ol></div>
+<h4>
+<a name="align.examples.h7"></a>
+ <span class="phrase"><a name="align.examples.checking_alignment"></a></span><a class="link" href="examples.html#align.examples.checking_alignment">Checking
+ alignment</a>
+ </h4>
+<p>
+ To check alignment of a pointer you can use the <code class="computeroutput"><span class="identifier">is_aligned</span></code>
+ function:
+ </p>
+<div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
+ <code class="computeroutput"><span class="identifier">assert</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">alignment</span><span class="special">::</span><span class="identifier">is_aligned</span><span class="special">(</span><span class="identifier">pointer</span><span class="special">,</span> <span class="number">64</span><span class="special">));</span></code>
+ </li></ol></div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2014-2016 Glen Joseph Fernandes<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2014-2017 Glen
+ Joseph Fernandes<p>
Distributed under the Boost Software License, Version 1.0.
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="tutorial.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="reference.html"><img src="../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="rationale.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="reference.html"><img src="../../../doc/src/images/next.png" alt="Next"></a>
</div>
</body>
</html>
diff --git a/doc/html/align/history.html b/doc/html/align/history.html
index d6b1f4423c..645bd9d6c0 100644
--- a/doc/html/align/history.html
+++ b/doc/html/align/history.html
@@ -27,36 +27,28 @@
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="align.history"></a><a class="link" href="history.html" title="History">History</a>
</h2></div></div></div>
-<h4>
-<a name="align.history.h0"></a>
- <span class="phrase"><a name="align.history.boost_1_61"></a></span><a class="link" href="history.html#align.history.boost_1_61">Boost
- 1.61</a>
- </h4>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
- Added functions for aligning up and aligning down of pointer and integral
- values.
- </li></ul></div>
-<h4>
-<a name="align.history.h1"></a>
- <span class="phrase"><a name="align.history.boost_1_59"></a></span><a class="link" href="history.html#align.history.boost_1_59">Boost
- 1.59</a>
- </h4>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
- Joel Falcou and Charly Chevalier together contributed the alignment hint
- macros.
- </li></ul></div>
-<h4>
-<a name="align.history.h2"></a>
- <span class="phrase"><a name="align.history.boost_1_56"></a></span><a class="link" href="history.html#align.history.boost_1_56">Boost
- 1.56</a>
- </h4>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
- Glen Fernandes implemented the Boost.Align library.
- </li></ul></div>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Boost 1.61</span></dt>
+<dd><p>
+ Functions for aligning up, down, and testing alignment of integral values.
+ </p></dd>
+<dt><span class="term">Boost 1.59</span></dt>
+<dd><p>
+ Joel Falcou and Charly Chevalier contributed the alignment hint macro.
+ </p></dd>
+<dt><span class="term">Boost 1.56</span></dt>
+<dd><p>
+ Glen Fernandes implemented and contributed the Align library to Boost.
+ </p></dd>
+</dl>
+</div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2014-2016 Glen Joseph Fernandes<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2014-2017 Glen
+ Joseph Fernandes<p>
Distributed under the Boost Software License, Version 1.0.
</p>
</div></td>
diff --git a/doc/html/align/rationale.html b/doc/html/align/rationale.html
index a5243c1af7..2782b673ba 100644
--- a/doc/html/align/rationale.html
+++ b/doc/html/align/rationale.html
@@ -8,7 +8,7 @@
<link rel="home" href="../index.html" title="The Boost C++ Libraries BoostBook Documentation Subset">
<link rel="up" href="../align.html" title="Chapter&#160;4.&#160;Boost.Align">
<link rel="prev" href="../align.html" title="Chapter&#160;4.&#160;Boost.Align">
-<link rel="next" href="tutorial.html" title="Tutorial">
+<link rel="next" href="examples.html" title="Examples">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
@@ -21,7 +21,7 @@
</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="../align.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="tutorial.html"><img src="../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="../align.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="examples.html"><img src="../../../doc/src/images/next.png" alt="Next"></a>
</div>
<div class="section">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
@@ -35,103 +35,44 @@
<p>
C++11 added the ability to specify increased alignment (over-alignment) for
class types. Unfortunately, <code class="computeroutput"><span class="special">::</span><span class="keyword">operator</span> <span class="keyword">new</span></code>
- allocation functions, <code class="computeroutput"><span class="keyword">new</span></code> expressions,
- and the default allocator, <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span></code>,
+ allocation functions, <code class="computeroutput"><span class="keyword">new</span></code> expressions
+ and the Default Allocator, <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span></code>,
do not support dynamic memory allocation of over-aligned data. This library
- provides allocation functions, allocators, allocator adaptors, and deleters,
- that are alignment aware.
+ provides allocation functions and allocators that respect the alignment requirements
+ of a type and so are suitable for allocating memory for over-aligned types.
</p>
-<div class="table">
-<a name="align.rationale.boost_align_solutions"></a><p class="title"><b>Table&#160;4.2.&#160;Boost.Align solutions</b></p>
-<div class="table-contents"><table class="table" summary="Boost.Align solutions">
-<colgroup>
-<col>
-<col>
-</colgroup>
-<thead><tr>
-<th>
- <p>
- Problem
- </p>
- </th>
-<th>
- <p>
- Solution
- </p>
- </th>
-</tr></thead>
-<tbody>
-<tr>
-<td>
- <p>
- <code class="computeroutput"><span class="special">::</span><span class="keyword">operator</span>
- <span class="keyword">new</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="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">no_throw_t</span><span class="special">&amp;)</span></code>
- </p>
- </td>
-<td>
- <p>
- <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>
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="computeroutput"><span class="special">::</span><span class="keyword">operator</span>
- <span class="keyword">delete</span><span class="special">(</span><span class="keyword">void</span><span class="special">*)</span></code>
- </p>
- </td>
-<td>
- <p>
- <code class="computeroutput"><span class="identifier">aligned_free</span><span class="special">(</span><span class="keyword">void</span><span class="special">*)</span></code>
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
- </p>
- </td>
-<td>
- <p>
- <code class="computeroutput"><span class="identifier">aligned_allocator</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="computeroutput"><span class="identifier">Allocator</span></code>
- </p>
- </td>
-<td>
- <p>
- <code class="computeroutput"><span class="identifier">aligned_allocator_adaptor</span><span class="special">&lt;</span><span class="identifier">Allocator</span><span class="special">&gt;</span></code>
- </p>
- </td>
-</tr>
-<tr>
-<td>
- <p>
- <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">default_delete</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
- </p>
- </td>
-<td>
- <p>
- <code class="computeroutput"><span class="identifier">aligned_delete</span></code>
- </p>
- </td>
-</tr>
-</tbody>
-</table></div>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term"><code class="computeroutput"><span class="identifier">aligned_alloc</span><span class="special">(</span><span class="identifier">alignment</span><span class="special">,</span> <span class="identifier">size</span><span class="special">)</span></code></span></dt>
+<dd><p>
+ Replaces <code class="computeroutput"><span class="special">::</span><span class="keyword">operator</span>
+ <span class="keyword">new</span><span class="special">(</span><span class="identifier">size</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">nothrow</span><span class="special">)</span></code>
+ </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">aligned_free</span><span class="special">(</span><span class="identifier">pointer</span><span class="special">)</span></code></span></dt>
+<dd><p>
+ Replaces <code class="computeroutput"><span class="special">::</span><span class="keyword">operator</span>
+ <span class="keyword">delete</span><span class="special">(</span><span class="identifier">pointer</span><span class="special">,</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">nothrow</span><span class="special">)</span></code>
+ </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">aligned_allocator</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code></span></dt>
+<dd><p>
+ Replaces <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
+ </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">aligned_allocator_adaptor</span><span class="special">&lt;</span><span class="identifier">Allocator</span><span class="special">&gt;</span></code></span></dt>
+<dd><p>
+ Replaces use of Allocator
+ </p></dd>
+<dt><span class="term"><code class="computeroutput"><span class="identifier">aligned_delete</span></code></span></dt>
+<dd><p>
+ Replaces <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">default_delete</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
+ </p></dd>
+</dl>
</div>
-<br class="table-break"><h4>
+<h4>
<a name="align.rationale.h1"></a>
- <span class="phrase"><a name="align.rationale.alignment_functions"></a></span><a class="link" href="rationale.html#align.rationale.alignment_functions">Alignment
- functions</a>
+ <span class="phrase"><a name="align.rationale.pointer_alignment"></a></span><a class="link" href="rationale.html#align.rationale.pointer_alignment">Pointer
+ alignment</a>
</h4>
<p>
C++11 provided <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">align</span></code> in the standard library to align a
@@ -143,8 +84,8 @@
</p>
<h4>
<a name="align.rationale.h2"></a>
- <span class="phrase"><a name="align.rationale.alignment_traits"></a></span><a class="link" href="rationale.html#align.rationale.alignment_traits">Alignment
- traits</a>
+ <span class="phrase"><a name="align.rationale.querying_alignment"></a></span><a class="link" href="rationale.html#align.rationale.querying_alignment">Querying
+ alignment</a>
</h4>
<p>
C++11 provided the <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">alignment_of</span></code> trait in the standard library
@@ -157,35 +98,38 @@
</p>
<h4>
<a name="align.rationale.h3"></a>
- <span class="phrase"><a name="align.rationale.alignment_hints"></a></span><a class="link" href="rationale.html#align.rationale.alignment_hints">Alignment
- hints</a>
+ <span class="phrase"><a name="align.rationale.hinting_alignment"></a></span><a class="link" href="rationale.html#align.rationale.hinting_alignment">Hinting
+ alignment</a>
</h4>
<p>
Allocating aligned memory is sometimes not enough to ensure that optimal code
is generated. Developers use specific compiler intrinsics to notify the compiler
- of a given alignment property of a memory block. This library provides a macro
+ of a given alignment property of a memory block. This library provides a macro,
+ <code class="computeroutput"><span class="identifier">BOOST_ALIGN_ASSUME_ALIGNED</span></code>,
to abstract that functionality for compilers with the appropriate intrinsics.
</p>
<h4>
<a name="align.rationale.h4"></a>
- <span class="phrase"><a name="align.rationale.alignment_testing"></a></span><a class="link" href="rationale.html#align.rationale.alignment_testing">Alignment
- testing</a>
+ <span class="phrase"><a name="align.rationale.checking_alignment"></a></span><a class="link" href="rationale.html#align.rationale.checking_alignment">Checking
+ alignment</a>
</h4>
<p>
- This library provides a function to test the alignment of a pointer value.
- It is generally useful in assertions to validate that memory is correctly aligned.
+ This library provides a function, <code class="computeroutput"><span class="identifier">is_aligned</span></code>
+ to test the alignment of a pointer value. It is generally useful in assertions
+ to validate that memory is correctly aligned.
</p>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2014-2016 Glen Joseph Fernandes<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2014-2017 Glen
+ Joseph Fernandes<p>
Distributed under the Boost Software License, Version 1.0.
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
-<a accesskey="p" href="../align.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="tutorial.html"><img src="../../../doc/src/images/next.png" alt="Next"></a>
+<a accesskey="p" href="../align.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="examples.html"><img src="../../../doc/src/images/next.png" alt="Next"></a>
</div>
</body>
</html>
diff --git a/doc/html/align/reference.html b/doc/html/align/reference.html
index 858b845af7..67af6a8676 100644
--- a/doc/html/align/reference.html
+++ b/doc/html/align/reference.html
@@ -28,860 +28,995 @@
<a name="align.reference"></a><a class="link" href="reference.html" title="Reference">Reference</a>
</h2></div></div></div>
<div class="toc"><dl class="toc">
-<dt><span class="section"><a href="reference.html#align.reference.align">align</a></span></dt>
-<dt><span class="section"><a href="reference.html#align.reference.align_down">align_down</a></span></dt>
-<dt><span class="section"><a href="reference.html#align.reference.align_up">align_up</a></span></dt>
-<dt><span class="section"><a href="reference.html#align.reference.aligned_alloc">aligned_alloc and aligned_free</a></span></dt>
-<dt><span class="section"><a href="reference.html#align.reference.aligned_allocator">aligned_allocator</a></span></dt>
-<dt><span class="section"><a href="reference.html#align.reference.aligned_allocator_adaptor">aligned_allocator_adaptor</a></span></dt>
-<dt><span class="section"><a href="reference.html#align.reference.aligned_delete">aligned_delete</a></span></dt>
-<dt><span class="section"><a href="reference.html#align.reference.alignment_of">alignment_of</a></span></dt>
-<dt><span class="section"><a href="reference.html#align.reference.assume_aligned">assume_aligned</a></span></dt>
-<dt><span class="section"><a href="reference.html#align.reference.is_aligned">is_aligned</a></span></dt>
+<dt><span class="section"><a href="reference.html#align.reference.functions">Functions</a></span></dt>
+<dt><span class="section"><a href="reference.html#align.reference.classes">Classes</a></span></dt>
+<dt><span class="section"><a href="reference.html#align.reference.traits">Traits</a></span></dt>
+<dt><span class="section"><a href="reference.html#align.reference.macros">Macros</a></span></dt>
</dl></div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
-<a name="align.reference.align"></a><a class="link" href="reference.html#align.reference.align" title="align">align</a>
+<a name="align.reference.functions"></a><a class="link" href="reference.html#align.reference.functions" title="Functions">Functions</a>
</h3></div></div></div>
-<p>
- The alignment function is used to obtain a pointer to the first address within
- the specified buffer that is a multiple of the specified alignment value.
- This function exists in the C++11 standard library but is provided in this
- library for those C++11 and C++03 library implementations which do not yet
- support it.
- </p>
-<h5>
-<a name="align.reference.align.h0"></a>
- <span class="phrase"><a name="align.reference.align.synopsis"></a></span><a class="link" href="reference.html#align.reference.align.synopsis">Header
- &lt;boost/align/align.hpp&gt;</a>
- </h5>
-<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
- <span class="keyword">namespace</span> <span class="identifier">alignment</span> <span class="special">{</span>
- <span class="keyword">void</span><span class="special">*</span> <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> <span class="identifier">size</span><span class="special">,</span> <span class="keyword">void</span><span class="special">*&amp;</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><span class="special">&amp;</span> <span class="identifier">space</span><span class="special">);</span>
- <span class="special">}</span>
-<span class="special">}</span>
-</pre>
-<h5>
-<a name="align.reference.align.h1"></a>
- <span class="phrase"><a name="align.reference.align.align"></a></span><a class="link" href="reference.html#align.reference.align.align">Function
- align</a>
- </h5>
-<pre class="programlisting"><span class="keyword">void</span><span class="special">*</span> <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> <span class="identifier">size</span><span class="special">,</span> <span class="keyword">void</span><span class="special">*&amp;</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><span class="special">&amp;</span> <span class="identifier">space</span><span class="special">);</span>
-</pre>
-<p>
- <span class="bold"><strong>Effects:</strong></span> If it is possible to fit <code class="computeroutput"><span class="identifier">size</span></code> bytes of storage aligned by <code class="computeroutput"><span class="identifier">alignment</span></code> into the buffer pointed to by
- <code class="computeroutput"><span class="identifier">ptr</span></code> with length <code class="computeroutput"><span class="identifier">space</span></code>, the function updates <code class="computeroutput"><span class="identifier">ptr</span></code> to point to the first possible address
- of such storage and decreases <code class="computeroutput"><span class="identifier">space</span></code>
- by the number of bytes used for alignment. Otherwise, the function does nothing.
- </p>
-<p>
- <span class="bold"><strong>Requires:</strong></span>
- </p>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
-<li class="listitem">
- <code class="computeroutput"><span class="identifier">alignment</span></code> shall be a
- fundamental alignment value or an extended alignment value, and shall
- be a power of two
- </li>
-<li class="listitem">
- <code class="computeroutput"><span class="identifier">ptr</span></code> shall point to contiguous
- storage of at least <code class="computeroutput"><span class="identifier">space</span></code>
- bytes
- </li>
-</ul></div>
-<p>
- <span class="bold"><strong>Returns:</strong></span> A null pointer if the requested
- aligned buffer would not fit into the available space, otherwise the adjusted
- value of <code class="computeroutput"><span class="identifier">ptr</span></code>.
- </p>
-<p>
- <span class="bold"><strong>Note:</strong></span> The function updates its <code class="computeroutput"><span class="identifier">ptr</span></code> and <code class="computeroutput"><span class="identifier">space</span></code>
- arguments so that it can be called repeatedly with possibly different <code class="computeroutput"><span class="identifier">alignment</span></code> and <code class="computeroutput"><span class="identifier">size</span></code>
- arguments for the same buffer.
- </p>
-</div>
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="reference.html#align.reference.functions.align">align</a></span></dt>
+<dt><span class="section"><a href="reference.html#align.reference.functions.align_up">align_up</a></span></dt>
+<dt><span class="section"><a href="reference.html#align.reference.functions.align_down">align_down</a></span></dt>
+<dt><span class="section"><a href="reference.html#align.reference.functions.aligned_alloc">aligned_alloc</a></span></dt>
+<dt><span class="section"><a href="reference.html#align.reference.functions.aligned_free">aligned_free</a></span></dt>
+<dt><span class="section"><a href="reference.html#align.reference.functions.is_aligned">is_aligned</a></span></dt>
+</dl></div>
<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="align.reference.align_down"></a><a class="link" href="reference.html#align.reference.align_down" title="align_down">align_down</a>
-</h3></div></div></div>
-<p>
- The directional alignment functions can be used with pointers or integral
- values to align down. This functionality is not yet provided by the C++ standard.
- </p>
-<h5>
-<a name="align.reference.align_down.h0"></a>
- <span class="phrase"><a name="align.reference.align_down.synopsis"></a></span><a class="link" href="reference.html#align.reference.align_down.synopsis">Header
- &lt;boost/align/align_down.hpp&gt;</a>
- </h5>
-<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
- <span class="keyword">namespace</span> <span class="identifier">alignment</span> <span class="special">{</span>
- <span class="keyword">constexpr</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">align_down</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_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>
-
- <span class="keyword">void</span><span class="special">*</span> <span class="identifier">align_down</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">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>
- <span class="special">}</span>
-<span class="special">}</span>
-</pre>
-<h5>
-<a name="align.reference.align_down.h1"></a>
- <span class="phrase"><a name="align.reference.align_down.align_down"></a></span><a class="link" href="reference.html#align.reference.align_down.align_down">Function
- align_down</a>
- </h5>
-<pre class="programlisting"><span class="keyword">void</span><span class="special">*</span> <span class="identifier">align_down</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">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>
-</pre>
-<p>
- <span class="bold"><strong>Requires:</strong></span>
- </p>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="align.reference.functions.align"></a><a class="link" href="reference.html#align.reference.functions.align" title="align">align</a>
+</h4></div></div></div>
+<p>
+ <code class="computeroutput"><span class="keyword">void</span><span class="special">*</span>
+ <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> <span class="identifier">size</span><span class="special">,</span> <span class="keyword">void</span><span class="special">*&amp;</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><span class="special">&amp;</span>
+ <span class="identifier">space</span><span class="special">);</span></code>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Header</span></dt>
+<dd>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span></code>
+ </dd>
+<dt><span class="term">Effects</span></dt>
+<dd><p>
+ If it is possible to fit <code class="computeroutput"><span class="identifier">size</span></code>
+ bytes of storage aligned by <code class="computeroutput"><span class="identifier">alignment</span></code>
+ into the buffer pointed to by <code class="computeroutput"><span class="identifier">ptr</span></code>
+ with length <code class="computeroutput"><span class="identifier">space</span></code>,
+ the function updates <code class="computeroutput"><span class="identifier">ptr</span></code>
+ to point to the first possible address of such storage and decreases
+ <code class="computeroutput"><span class="identifier">space</span></code> by the number
+ of bytes used for alignment. Otherwise, the function does nothing.
+ </p></dd>
+<dt><span class="term">Requires</span></dt>
+<dd><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
- <code class="computeroutput"><span class="identifier">ptr</span></code> shall point to contiguous
- storage with sufficient space for alignment
- </li>
+ <code class="computeroutput"><span class="identifier">alignment</span></code> shall
+ be a power of two
+ </li>
<li class="listitem">
- <code class="computeroutput"><span class="identifier">alignment</span></code> shall be a
- power of two
- </li>
-</ul></div>
-<p>
- <span class="bold"><strong>Returns:</strong></span> A pointer value at or before <code class="computeroutput"><span class="identifier">ptr</span></code> that is at least <code class="computeroutput"><span class="identifier">alignment</span></code>
- bytes aligned.
- </p>
+ <code class="computeroutput"><span class="identifier">ptr</span></code> shall point
+ to contiguous storage of at least <code class="computeroutput"><span class="identifier">space</span></code>
+ bytes
+ </li>
+</ul></div></dd>
+<dt><span class="term">Returns</span></dt>
+<dd>
+ A null pointer if the requested aligned buffer would not fit into
+ the available space, otherwise the adjusted value of <code class="computeroutput"><span class="identifier">ptr</span></code>.
+ </dd>
+<dt><span class="term">Note</span></dt>
+<dd><p>
+ The function updates its <code class="computeroutput"><span class="identifier">ptr</span></code>
+ and <code class="computeroutput"><span class="identifier">space</span></code> arguments
+ so that it can be called repeatedly with possibly different <code class="computeroutput"><span class="identifier">alignment</span></code> and <code class="computeroutput"><span class="identifier">size</span></code>
+ arguments for the same buffer.
+ </p></dd>
+</dl>
+</div>
</div>
<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="align.reference.align_up"></a><a class="link" href="reference.html#align.reference.align_up" title="align_up">align_up</a>
-</h3></div></div></div>
-<p>
- The directional alignment functions can be used with pointers or integral
- values to align up. This functionality is not yet provided by the C++ standard.
- </p>
-<h5>
-<a name="align.reference.align_up.h0"></a>
- <span class="phrase"><a name="align.reference.align_up.synopsis"></a></span><a class="link" href="reference.html#align.reference.align_up.synopsis">Header
- &lt;boost/align/align_up.hpp&gt;</a>
- </h5>
-<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
- <span class="keyword">namespace</span> <span class="identifier">alignment</span> <span class="special">{</span>
- <span class="keyword">constexpr</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">align_up</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_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>
-
- <span class="keyword">void</span><span class="special">*</span> <span class="identifier">align_up</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">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>
- <span class="special">}</span>
-<span class="special">}</span>
-</pre>
-<h5>
-<a name="align.reference.align_up.h1"></a>
- <span class="phrase"><a name="align.reference.align_up.align_up"></a></span><a class="link" href="reference.html#align.reference.align_up.align_up">Function
- align_up</a>
- </h5>
-<pre class="programlisting"><span class="keyword">void</span><span class="special">*</span> <span class="identifier">align_up</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">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>
-</pre>
-<p>
- <span class="bold"><strong>Requires:</strong></span>
- </p>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
-<li class="listitem">
- <code class="computeroutput"><span class="identifier">ptr</span></code> shall point to contiguous
- storage with sufficient space for alignment
- </li>
-<li class="listitem">
- <code class="computeroutput"><span class="identifier">alignment</span></code> shall be a
- power of two
- </li>
-</ul></div>
-<p>
- <span class="bold"><strong>Returns:</strong></span> A pointer value at or after <code class="computeroutput"><span class="identifier">ptr</span></code> that is at least <code class="computeroutput"><span class="identifier">alignment</span></code>
- bytes aligned.
- </p>
+<div class="titlepage"><div><div><h4 class="title">
+<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>
+</h4></div></div></div>
+<p>
+ <code class="computeroutput"><span class="keyword">constexpr</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">align_up</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_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>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Header</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span></code>
+ </p></dd>
+<dt><span class="term">Requires</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">alignment</span></code> shall be
+ a power of two
+ </p></dd>
+<dt><span class="term">Returns</span></dt>
+<dd><p>
+ A value at or after <code class="computeroutput"><span class="identifier">value</span></code>
+ that is a multiple of <code class="computeroutput"><span class="identifier">alignment</span></code>.
+ </p></dd>
+</dl>
+</div>
</div>
<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="align.reference.aligned_alloc"></a><a class="link" href="reference.html#align.reference.aligned_alloc" title="aligned_alloc and aligned_free">aligned_alloc and aligned_free</a>
-</h3></div></div></div>
-<p>
- The aligned allocation function is a replacement for <code class="computeroutput"><span class="special">::</span><span class="keyword">operator</span> <span class="keyword">new</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="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">no_throw_t</span><span class="special">&amp;)</span></code> that allows requesting aligned memory.
- The deallocation function replaces the corresponding <code class="computeroutput"><span class="special">::</span><span class="keyword">operator</span> <span class="keyword">delete</span><span class="special">(</span><span class="keyword">void</span><span class="special">*)</span></code>
- function. This functionality is not yet provided by the C++ standard.
- </p>
-<h5>
-<a name="align.reference.aligned_alloc.h0"></a>
- <span class="phrase"><a name="align.reference.aligned_alloc.synopsis"></a></span><a class="link" href="reference.html#align.reference.aligned_alloc.synopsis">Header
- &lt;boost/align/aligned_alloc.hpp&gt;</a>
- </h5>
-<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
- <span class="keyword">namespace</span> <span class="identifier">alignment</span> <span class="special">{</span>
- <span class="keyword">void</span><span class="special">*</span> <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> <span class="identifier">size</span><span class="special">);</span>
-
- <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>
- <span class="special">}</span>
-<span class="special">}</span>
-</pre>
-<h5>
-<a name="align.reference.aligned_alloc.h1"></a>
- <span class="phrase"><a name="align.reference.aligned_alloc.aligned_alloc"></a></span><a class="link" href="reference.html#align.reference.aligned_alloc.aligned_alloc">Function
- aligned_alloc</a>
- </h5>
-<pre class="programlisting"><span class="keyword">void</span><span class="special">*</span> <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> <span class="identifier">size</span><span class="special">);</span>
-</pre>
-<p>
- <span class="bold"><strong>Effects:</strong></span> Allocates space for an object whose
- alignment is specified by <code class="computeroutput"><span class="identifier">alignment</span></code>,
- whose size is specified by <code class="computeroutput"><span class="identifier">size</span></code>,
- and whose value is indeterminate. The value of <code class="computeroutput"><span class="identifier">alignment</span></code>
- shall be a power of two.
- </p>
-<p>
- <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="identifier">alignment</span></code>
- shall be a power of two.
- </p>
-<p>
- <span class="bold"><strong>Returns:</strong></span> A null pointer or a pointer to
- the allocated space.
- </p>
-<p>
- <span class="bold"><strong>Note:</strong></span> On certain platforms, the alignment
- may be rounded up to <code class="computeroutput"><span class="keyword">alignof</span><span class="special">(</span><span class="keyword">void</span><span class="special">*)</span></code>
- and the space allocated may be slightly larger than <code class="computeroutput"><span class="identifier">size</span></code>
- bytes, by an additional <code class="computeroutput"><span class="keyword">sizeof</span><span class="special">(</span><span class="keyword">void</span><span class="special">*)</span></code>
- and <code class="computeroutput"><span class="identifier">alignment</span> <span class="special">-</span>
- <span class="number">1</span></code> bytes.
- </p>
-<h5>
-<a name="align.reference.aligned_alloc.h2"></a>
- <span class="phrase"><a name="align.reference.aligned_alloc.aligned_free"></a></span><a class="link" href="reference.html#align.reference.aligned_alloc.aligned_free">Function
- aligned_free</a>
- </h5>
-<pre class="programlisting"><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>
-</pre>
-<p>
- <span class="bold"><strong>Effects:</strong></span> Causes the space pointed to by
- <code class="computeroutput"><span class="identifier">ptr</span></code> to be deallocated, that
- is, made available for further allocation. If <code class="computeroutput"><span class="identifier">ptr</span></code>
- is a null pointer, no action occurs. Otherwise, if the argument does not
- match a pointer earlier returned by the <code class="computeroutput"><span class="identifier">aligned_alloc</span></code>
- function, or if the space has been deallocated by a call to <code class="computeroutput"><span class="identifier">aligned_free</span></code>, the behavior is undefined.
- </p>
-<p>
- <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="identifier">ptr</span></code>
- is a null pointer or a pointer earlier returned by the <code class="computeroutput"><span class="identifier">aligned_alloc</span></code>
- function that has not been deallocated by a call to <code class="computeroutput"><span class="identifier">aligned_free</span></code>.
- </p>
-<p>
- <span class="bold"><strong>Returns:</strong></span> The <code class="computeroutput"><span class="identifier">aligned_free</span></code>
- function returns no value.
- </p>
+<div class="titlepage"><div><div><h4 class="title">
+<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>
+</h4></div></div></div>
+<p>
+ <code class="computeroutput"><span class="keyword">constexpr</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">align_down</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_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>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Header</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span></code>
+ </p></dd>
+<dt><span class="term">Requires</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">alignment</span></code> shall be
+ a power of two
+ </p></dd>
+<dt><span class="term">Returns</span></dt>
+<dd><p>
+ A value at or before <code class="computeroutput"><span class="identifier">value</span></code>
+ that is a multiple of <code class="computeroutput"><span class="identifier">alignment</span></code>.
+ </p></dd>
+</dl>
+</div>
</div>
<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="align.reference.aligned_allocator"></a><a class="link" href="reference.html#align.reference.aligned_allocator" title="aligned_allocator">aligned_allocator</a>
-</h3></div></div></div>
-<p>
- The aligned allocator is a replacement for the default allocator, <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span></code>,
- that supports value types which are over-aligned. It also allows specifying
- a minimum alignment value used for all allocations, via the optional template
- parameter. An alignment aware allocator is not yet provided by the C++ standard.
- </p>
-<div class="tip"><table border="0" summary="Tip">
-<tr>
-<td rowspan="2" align="center" valign="top" width="25"><img alt="[Tip]" src="../../../doc/src/images/tip.png"></td>
-<th align="left">Tip</th>
-</tr>
-<tr><td align="left" valign="top"><p>
- Using the aligned allocator with a minimum alignment value is generally
- only suitable with containers that are not node-based such as <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span></code>. With node-based containers, such
- as list, the node object would have the minimum alignment instead of the
- value type object.
- </p></td></tr>
-</table></div>
-<h5>
-<a name="align.reference.aligned_allocator.h0"></a>
- <span class="phrase"><a name="align.reference.aligned_allocator.synopsis"></a></span><a class="link" href="reference.html#align.reference.aligned_allocator.synopsis">Header
- &lt;boost/align/aligned_allocator.hpp&gt;</a>
- </h5>
-<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
- <span class="keyword">namespace</span> <span class="identifier">alignment</span> <span class="special">{</span>
- <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="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">Alignment</span> <span class="special">=</span> <span class="number">1</span><span class="special">&gt;</span>
- <span class="keyword">class</span> <span class="identifier">aligned_allocator</span><span class="special">;</span>
-
- <span class="keyword">template</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">Alignment</span><span class="special">&gt;</span>
- <span class="keyword">class</span> <span class="identifier">aligned_allocator</span><span class="special">&lt;</span><span class="keyword">void</span><span class="special">,</span> <span class="identifier">Alignment</span><span class="special">&gt;;</span>
-
- <span class="keyword">template</span><span class="special">&lt;</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">&gt;</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">&lt;</span><span class="identifier">T1</span><span class="special">,</span>
- <span class="identifier">Alignment</span><span class="special">&gt;&amp;,</span> <span class="keyword">const</span> <span class="identifier">aligned_allocator</span><span class="special">&lt;</span><span class="identifier">T2</span><span class="special">,</span>
- <span class="identifier">Alignment</span><span class="special">&gt;&amp;)</span> <span class="keyword">noexcept</span><span class="special">;</span>
-
- <span class="keyword">template</span><span class="special">&lt;</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">&gt;</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">&lt;</span><span class="identifier">T1</span><span class="special">,</span>
- <span class="identifier">Alignment</span><span class="special">&gt;&amp;,</span> <span class="keyword">const</span> <span class="identifier">aligned_allocator</span><span class="special">&lt;</span><span class="identifier">T2</span><span class="special">,</span>
- <span class="identifier">Alignment</span><span class="special">&gt;&amp;)</span> <span class="keyword">noexcept</span><span class="special">;</span>
- <span class="special">}</span>
-<span class="special">}</span>
-</pre>
-<h5>
-<a name="align.reference.aligned_allocator.h1"></a>
- <span class="phrase"><a name="align.reference.aligned_allocator.aligned_allocator"></a></span><a class="link" href="reference.html#align.reference.aligned_allocator.aligned_allocator">Class
- template aligned_allocator</a>
- </h5>
-<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="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">Alignment</span> <span class="special">=</span> <span class="number">1</span><span class="special">&gt;</span>
-<span class="keyword">class</span> <span class="identifier">aligned_allocator</span> <span class="special">{</span>
-<span class="keyword">public</span><span class="special">:</span>
- <span class="keyword">typedef</span> <span class="identifier">T</span> <span class="identifier">value_type</span><span class="special">;</span>
- <span class="keyword">typedef</span> <span class="identifier">T</span><span class="special">*</span> <span class="identifier">pointer</span><span class="special">;</span>
- <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">*</span> <span class="identifier">const_pointer</span><span class="special">;</span>
- <span class="keyword">typedef</span> <span class="keyword">void</span><span class="special">*</span> <span class="identifier">void_pointer</span><span class="special">;</span>
- <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keyword">void</span><span class="special">*</span> <span class="identifier">const_void_pointer</span><span class="special">;</span>
- <span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">size_type</span><span class="special">;</span>
- <span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">ptrdiff_t</span> <span class="identifier">difference_type</span><span class="special">;</span>
- <span class="keyword">typedef</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">reference</span><span class="special">;</span>
- <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">const_reference</span><span class="special">;</span>
-
- <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">&gt;</span>
- <span class="keyword">struct</span> <span class="identifier">rebind</span> <span class="special">{</span>
- <span class="keyword">typedef</span> <span class="identifier">aligned_allocator</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">,</span> <span class="identifier">Alignment</span><span class="special">&gt;</span> <span class="identifier">other</span><span class="special">;</span>
- <span class="special">};</span>
-
- <span class="identifier">aligned_allocator</span><span class="special">()</span> <span class="special">=</span> <span class="keyword">default</span><span class="special">;</span>
-
- <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">&gt;</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">&lt;</span><span class="identifier">U</span><span class="special">,</span> <span class="identifier">Alignment</span><span class="special">&gt;&amp;)</span> <span class="keyword">noexcept</span><span class="special">;</span>
-
- <span class="identifier">pointer</span> <span class="identifier">address</span><span class="special">(</span><span class="identifier">reference</span> <span class="identifier">value</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
-
- <span class="identifier">const_pointer</span> <span class="identifier">address</span><span class="special">(</span><span class="identifier">const_reference</span> <span class="identifier">value</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
-
- <span class="identifier">pointer</span> <span class="identifier">allocate</span><span class="special">(</span><span class="identifier">size_type</span> <span class="identifier">size</span><span class="special">,</span> <span class="identifier">const_void_pointer</span> <span class="special">=</span> <span class="number">0</span><span class="special">);</span>
-
- <span class="keyword">void</span> <span class="identifier">deallocate</span><span class="special">(</span><span class="identifier">pointer</span> <span class="identifier">ptr</span><span class="special">,</span> <span class="identifier">size_type</span><span class="special">);</span>
-
- <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>
-
- <span class="keyword">template</span><span class="special">&lt;</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">&gt;</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">&amp;&amp;...</span> <span class="identifier">args</span><span class="special">);</span>
-
- <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">&gt;</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>
-<span class="special">};</span>
-
-<span class="keyword">template</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">Alignment</span><span class="special">&gt;</span>
-<span class="keyword">class</span> <span class="identifier">aligned_allocator</span><span class="special">&lt;</span><span class="keyword">void</span><span class="special">,</span> <span class="identifier">Alignment</span><span class="special">&gt;</span> <span class="special">{</span>
-<span class="keyword">public</span><span class="special">:</span>
- <span class="keyword">typedef</span> <span class="keyword">void</span> <span class="identifier">value_type</span><span class="special">;</span>
- <span class="keyword">typedef</span> <span class="keyword">void</span><span class="special">*</span> <span class="identifier">pointer</span><span class="special">;</span>
- <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keyword">void</span><span class="special">*</span> <span class="identifier">const_pointer</span><span class="special">;</span>
-
- <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">&gt;</span>
- <span class="keyword">struct</span> <span class="identifier">rebind</span> <span class="special">{</span>
- <span class="keyword">typedef</span> <span class="identifier">aligned_allocator</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">,</span> <span class="identifier">Alignment</span><span class="special">&gt;</span> <span class="identifier">other</span><span class="special">;</span>
- <span class="special">};</span>
-<span class="special">};</span>
-</pre>
-<h5>
-<a name="align.reference.aligned_allocator.h2"></a>
- <span class="phrase"><a name="align.reference.aligned_allocator.members"></a></span><a class="link" href="reference.html#align.reference.aligned_allocator.members">Members</a>
- </h5>
-<p>
- Except for the destructor, member functions of the aligned allocator shall
- not introduce data races as a result of concurrent calls to those member
- functions from different threads. Calls to these functions that allocate
- or deallocate a particular unit of storage shall occur in a single total
- order, and each such deallocation call shall happen before the next allocation
- (if any) in this order.
- </p>
-<pre class="programlisting"><span class="identifier">pointer</span> <span class="identifier">address</span><span class="special">(</span><span class="identifier">reference</span> <span class="identifier">value</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
-</pre>
-<p>
- <span class="bold"><strong>Returns:</strong></span> The actual address of the object
- referenced by <code class="computeroutput"><span class="identifier">value</span></code>, even
- in the presence of an overloaded <code class="computeroutput"><span class="keyword">operator</span><span class="special">&amp;</span></code>.
- </p>
-<pre class="programlisting"><span class="identifier">const_pointer</span> <span class="identifier">address</span><span class="special">(</span><span class="identifier">const_reference</span> <span class="identifier">value</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
-</pre>
-<p>
- <span class="bold"><strong>Returns:</strong></span> The actual address of the object
- referenced by <code class="computeroutput"><span class="identifier">value</span></code>, even
- in the presence of an overloaded <code class="computeroutput"><span class="keyword">operator</span><span class="special">&amp;</span></code>.
- </p>
-<pre class="programlisting"><span class="identifier">pointer</span> <span class="identifier">allocate</span><span class="special">(</span><span class="identifier">size_type</span> <span class="identifier">size</span><span class="special">,</span> <span class="identifier">const_void_pointer</span> <span class="special">=</span> <span class="number">0</span><span class="special">);</span>
-</pre>
-<p>
- <span class="bold"><strong>Returns:</strong></span> A pointer to the initial element
- of an array of storage of size <code class="computeroutput"><span class="identifier">n</span>
- <span class="special">*</span> <span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">T</span><span class="special">)</span></code>,
- aligned on the maximum of the minimum alignment specified and the alignment
- of objects of type <code class="computeroutput"><span class="identifier">T</span></code>.
- </p>
-<p>
- <span class="bold"><strong>Remark:</strong></span> 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>.
- </p>
-<p>
- <span class="bold"><strong>Throws:</strong></span> <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">bad_alloc</span></code>
- if the storage cannot be obtained.
- </p>
-<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">deallocate</span><span class="special">(</span><span class="identifier">pointer</span> <span class="identifier">ptr</span><span class="special">,</span> <span class="identifier">size_type</span><span class="special">);</span>
-</pre>
-<p>
- <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="identifier">ptr</span></code>
- shall be a pointer value obtained from <code class="computeroutput"><span class="identifier">allocate</span><span class="special">()</span></code>.
- </p>
-<p>
- <span class="bold"><strong>Effects:</strong></span> Deallocates the storage referenced
- by <code class="computeroutput"><span class="identifier">ptr</span></code>.
- </p>
-<p>
- <span class="bold"><strong>Remark:</strong></span> Uses <code class="computeroutput"><span class="identifier">alignment</span><span class="special">::</span><span class="identifier">aligned_free</span><span class="special">(</span><span class="keyword">void</span><span class="special">*)</span></code>.
- </p>
-<pre class="programlisting"><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>
-</pre>
-<p>
- <span class="bold"><strong>Returns:</strong></span> The largest value <code class="computeroutput"><span class="identifier">N</span></code> 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.
- </p>
-<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</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">&gt;</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">&amp;&amp;...</span> <span class="identifier">args</span><span class="special">);</span>
-</pre>
-<p>
- <span class="bold"><strong>Effects:</strong></span> <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">&lt;</span><span class="identifier">Args</span><span class="special">&gt;(</span><span class="identifier">args</span><span class="special">)...)</span></code>
- </p>
-<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">&gt;</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>
-</pre>
-<p>
- <span class="bold"><strong>Effects:</strong></span> <code class="computeroutput"><span class="identifier">ptr</span><span class="special">-&gt;~</span><span class="identifier">U</span><span class="special">()</span></code>
- </p>
-<h5>
-<a name="align.reference.aligned_allocator.h3"></a>
- <span class="phrase"><a name="align.reference.aligned_allocator.globals"></a></span><a class="link" href="reference.html#align.reference.aligned_allocator.globals">Globals</a>
- </h5>
-<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</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">&gt;</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">&lt;</span><span class="identifier">T1</span><span class="special">,</span>
- <span class="identifier">Alignment</span><span class="special">&gt;&amp;,</span> <span class="keyword">const</span> <span class="identifier">aligned_allocator</span><span class="special">&lt;</span><span class="identifier">T2</span><span class="special">,</span>
- <span class="identifier">Alignment</span><span class="special">&gt;&amp;)</span> <span class="keyword">noexcept</span><span class="special">;</span>
-</pre>
-<p>
- <span class="bold"><strong>Returns:</strong></span> <code class="computeroutput"><span class="keyword">true</span></code>.
- </p>
-<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</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">&gt;</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">&lt;</span><span class="identifier">T1</span><span class="special">,</span>
- <span class="identifier">Alignment</span><span class="special">&gt;&amp;,</span> <span class="keyword">const</span> <span class="identifier">aligned_allocator</span><span class="special">&lt;</span><span class="identifier">T2</span><span class="special">,</span>
- <span class="identifier">Alignment</span><span class="special">&gt;&amp;)</span> <span class="keyword">noexcept</span><span class="special">;</span>
-</pre>
-<p>
- <span class="bold"><strong>Returns:</strong></span> <code class="computeroutput"><span class="keyword">false</span></code>.
- </p>
+<div class="titlepage"><div><div><h4 class="title">
+<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>
+</h4></div></div></div>
+<p>
+ <code class="computeroutput"><span class="keyword">void</span><span class="special">*</span>
+ <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> <span class="identifier">size</span><span class="special">);</span></code>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Header</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span></code>
+ </p></dd>
+<dt><span class="term">Effects</span></dt>
+<dd><p>
+ Allocates space for an object whose alignment is specified by <code class="computeroutput"><span class="identifier">alignment</span></code>, whose size is specified
+ by <code class="computeroutput"><span class="identifier">size</span></code>, and whose
+ value is indeterminate.
+ </p></dd>
+<dt><span class="term">Requires</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">alignment</span></code> shall be
+ a power of two.
+ </p></dd>
+<dt><span class="term">Returns</span></dt>
+<dd><p>
+ A null pointer or a pointer to the allocated space.
+ </p></dd>
+<dt><span class="term">Note</span></dt>
+<dd><p>
+ On certain platforms, the space allocated may be slightly larger
+ than <code class="computeroutput"><span class="identifier">size</span></code> bytes,
+ to allow for alignment.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<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>
+</h4></div></div></div>
+<p>
+ <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>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Header</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span></code>
+ </p></dd>
+<dt><span class="term">Effects</span></dt>
+<dd><p>
+ Causes the space pointed to by <code class="computeroutput"><span class="identifier">ptr</span></code>
+ to be deallocated, that is, made available for further allocation.
+ If <code class="computeroutput"><span class="identifier">ptr</span></code> is a null
+ pointer, no action occurs. Otherwise, if the argument does not match
+ a pointer earlier returned by the <code class="computeroutput"><span class="identifier">aligned_alloc</span><span class="special">()</span></code> function, or if the space has been
+ deallocated by a call to <code class="computeroutput"><span class="identifier">aligned_free</span><span class="special">()</span></code>, the behavior is undefined.
+ </p></dd>
+<dt><span class="term">Requires</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">ptr</span></code> is a null pointer
+ or a pointer earlier returned by the <code class="computeroutput"><span class="identifier">aligned_alloc</span><span class="special">()</span></code> function that has not been deallocated
+ by a call to <code class="computeroutput"><span class="identifier">aligned_free</span><span class="special">()</span></code>.
+ </p></dd>
+<dt><span class="term">Returns</span></dt>
+<dd><p>
+ The <code class="computeroutput"><span class="identifier">aligned_free</span><span class="special">()</span></code> function returns no value.
+ </p></dd>
+</dl>
+</div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<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>
+</h4></div></div></div>
+<p>
+ <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">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> <span class="identifier">alignment</span><span class="special">)</span>
+ <span class="keyword">noexcept</span><span class="special">;</span></code>
+ </p>
+<p>
+ <code class="computeroutput"><span class="keyword">constexpr</span> <span class="keyword">bool</span>
+ <span class="identifier">is_aligned</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_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>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Header</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span></code>
+ </p></dd>
+<dt><span class="term">Requires</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">alignment</span></code> shall be
+ a power of two.
+ </p></dd>
+<dt><span class="term">Returns</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="keyword">true</span></code> if the value of
+ the first argument is aligned on the boundary specified by <code class="computeroutput"><span class="identifier">alignment</span></code>, otherwise <code class="computeroutput"><span class="keyword">false</span></code>.
+ </p></dd>
+</dl>
+</div>
+</div>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
-<a name="align.reference.aligned_allocator_adaptor"></a><a class="link" href="reference.html#align.reference.aligned_allocator_adaptor" title="aligned_allocator_adaptor">aligned_allocator_adaptor</a>
+<a name="align.reference.classes"></a><a class="link" href="reference.html#align.reference.classes" title="Classes">Classes</a>
</h3></div></div></div>
-<p>
- The aligned allocator adaptor can turn any existing C++03 or C++11 allocator
- into one that supports value types that are over-aligned. It also allows
- specifying a minimum alignment value used for all allocations, via the optional
- template parameter. An alignment aware allocator adaptor is not yet provided
- by the C++ standard.
- </p>
-<div class="tip"><table border="0" summary="Tip">
-<tr>
-<td rowspan="2" align="center" valign="top" width="25"><img alt="[Tip]" src="../../../doc/src/images/tip.png"></td>
-<th align="left">Tip</th>
-</tr>
-<tr><td align="left" valign="top"><p>
- This adaptor can be used with a C++11 allocator whose pointer type is a
- smart pointer but the adaptor can choose to expose only raw pointer types.
- </p></td></tr>
-</table></div>
-<h5>
-<a name="align.reference.aligned_allocator_adaptor.h0"></a>
- <span class="phrase"><a name="align.reference.aligned_allocator_adaptor.synopsis"></a></span><a class="link" href="reference.html#align.reference.aligned_allocator_adaptor.synopsis">Header
- &lt;boost/align/aligned_allocator_adaptor.hpp&gt;</a>
- </h5>
-<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
- <span class="keyword">namespace</span> <span class="identifier">alignment</span> <span class="special">{</span>
- <span class="keyword">template</span><span class="special">&lt;</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> <span class="identifier">Alignment</span> <span class="special">=</span> <span class="number">1</span><span class="special">&gt;</span>
- <span class="keyword">class</span> <span class="identifier">aligned_allocator_adaptor</span><span class="special">;</span>
-
- <span class="keyword">template</span><span class="special">&lt;</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">&gt;</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">&lt;</span><span class="identifier">A1</span><span class="special">,</span>
- <span class="identifier">Alignment</span><span class="special">&gt;&amp;</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">&lt;</span><span class="identifier">A2</span><span class="special">,</span>
- <span class="identifier">Alignment</span><span class="special">&gt;&amp;</span> <span class="identifier">a2</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span>
-
- <span class="keyword">template</span><span class="special">&lt;</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">&gt;</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">&lt;</span><span class="identifier">A1</span><span class="special">,</span>
- <span class="identifier">Alignment</span><span class="special">&gt;&amp;</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">&lt;</span><span class="identifier">A2</span><span class="special">,</span>
- <span class="identifier">Alignment</span><span class="special">&gt;&amp;</span> <span class="identifier">a2</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span>
- <span class="special">}</span>
-<span class="special">}</span>
-</pre>
-<h5>
-<a name="align.reference.aligned_allocator_adaptor.h1"></a>
- <span class="phrase"><a name="align.reference.aligned_allocator_adaptor.aligned_allocator_adaptor"></a></span><a class="link" href="reference.html#align.reference.aligned_allocator_adaptor.aligned_allocator_adaptor">Class
- template aligned_allocator_adaptor</a>
- </h5>
-<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</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> <span class="identifier">Alignment</span> <span class="special">=</span> <span class="number">1</span><span class="special">&gt;</span>
-<span class="keyword">class</span> <span class="identifier">aligned_allocator_adaptor</span>
- <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">Allocator</span> <span class="special">{</span>
- <span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator_traits</span><span class="special">&lt;</span><span class="identifier">Allocator</span><span class="special">&gt;</span> <span class="identifier">Traits</span><span class="special">;</span> <span class="comment">// exposition</span>
-
-<span class="keyword">public</span><span class="special">:</span>
- <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">Traits</span><span class="special">::</span><span class="identifier">value_type</span> <span class="identifier">value_type</span><span class="special">;</span>
- <span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">Traits</span><span class="special">::</span><span class="identifier">size_type</span> <span class="identifier">size_type</span><span class="special">;</span>
- <span class="keyword">typedef</span> <span class="identifier">value_type</span><span class="special">*</span> <span class="identifier">pointer</span><span class="special">;</span>
- <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="identifier">value_type</span><span class="special">*</span> <span class="identifier">const_pointer</span><span class="special">;</span>
- <span class="keyword">typedef</span> <span class="keyword">void</span><span class="special">*</span> <span class="identifier">void_pointer</span><span class="special">;</span>
- <span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keyword">void</span><span class="special">*</span> <span class="identifier">const_void_pointer</span><span class="special">;</span>
- <span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">ptrdiff_t</span> <span class="identifier">difference_type</span><span class="special">;</span>
-
- <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">&gt;</span>
- <span class="keyword">struct</span> <span class="identifier">rebind</span> <span class="special">{</span>
- <span class="keyword">typedef</span> <span class="identifier">aligned_allocator_adaptor</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Traits</span><span class="special">::</span><span class="keyword">template</span>
- <span class="identifier">rebind_alloc</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;,</span> <span class="identifier">Alignment</span><span class="special">&gt;</span> <span class="identifier">other</span><span class="special">;</span>
- <span class="special">};</span>
-
- <span class="identifier">aligned_allocator_adaptor</span><span class="special">()</span> <span class="special">=</span> <span class="keyword">default</span><span class="special">;</span>
-
- <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">explicit</span> <span class="identifier">aligned_allocator_adaptor</span><span class="special">(</span><span class="identifier">A</span><span class="special">&amp;&amp;</span> <span class="identifier">alloc</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span>
-
- <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">&gt;</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">&lt;</span><span class="identifier">U</span><span class="special">,</span>
- <span class="identifier">Alignment</span><span class="special">&gt;&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span>
-
- <span class="identifier">Allocator</span><span class="special">&amp;</span> <span class="identifier">base</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span>
-
- <span class="keyword">const</span> <span class="identifier">Allocator</span><span class="special">&amp;</span> <span class="identifier">base</span><span class="special">()</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
-
- <span class="identifier">pointer</span> <span class="identifier">allocate</span><span class="special">(</span><span class="identifier">size_type</span> <span class="identifier">size</span><span class="special">);</span>
-
- <span class="identifier">pointer</span> <span class="identifier">allocate</span><span class="special">(</span><span class="identifier">size_type</span> <span class="identifier">size</span><span class="special">,</span> <span class="identifier">const_void_pointer</span> <span class="identifier">hint</span><span class="special">);</span>
-
- <span class="keyword">void</span> <span class="identifier">deallocate</span><span class="special">(</span><span class="identifier">pointer</span> <span class="identifier">ptr</span><span class="special">,</span> <span class="identifier">size_type</span> <span class="identifier">size</span><span class="special">);</span>
-<span class="special">};</span>
-</pre>
-<h5>
-<a name="align.reference.aligned_allocator_adaptor.h2"></a>
- <span class="phrase"><a name="align.reference.aligned_allocator_adaptor.constructors"></a></span><a class="link" href="reference.html#align.reference.aligned_allocator_adaptor.constructors">Constructors</a>
- </h5>
-<pre class="programlisting"><span class="identifier">aligned_allocator_adaptor</span><span class="special">()</span> <span class="special">=</span> <span class="keyword">default</span><span class="special">;</span>
-</pre>
-<p>
- <span class="bold"><strong>Effects:</strong></span> Value-initializes the <code class="computeroutput"><span class="identifier">Allocator</span></code> base class.
- </p>
-<pre class="programlisting"><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">explicit</span> <span class="identifier">aligned_allocator_adaptor</span><span class="special">(</span><span class="identifier">A</span><span class="special">&amp;&amp;</span> <span class="identifier">alloc</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span>
-</pre>
-<p>
- <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="identifier">Allocator</span></code>
- shall be constructible from <code class="computeroutput"><span class="identifier">A</span></code>.
- </p>
-<p>
- <span class="bold"><strong>Effects:</strong></span> Initializes the <code class="computeroutput"><span class="identifier">Allocator</span></code>
- base class with <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">forward</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;(</span><span class="identifier">alloc</span><span class="special">)</span></code>.
- </p>
-<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">&gt;</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">&lt;</span><span class="identifier">U</span><span class="special">,</span>
- <span class="identifier">Alignment</span><span class="special">&gt;&amp;</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span>
-</pre>
-<p>
- <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="identifier">Allocator</span></code>
- shall be constructible from <code class="computeroutput"><span class="identifier">A</span></code>.
- </p>
-<p>
- <span class="bold"><strong>Effects:</strong></span> Initializes the <code class="computeroutput"><span class="identifier">Allocator</span></code>
- 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>.
- </p>
-<h5>
-<a name="align.reference.aligned_allocator_adaptor.h3"></a>
- <span class="phrase"><a name="align.reference.aligned_allocator_adaptor.members"></a></span><a class="link" href="reference.html#align.reference.aligned_allocator_adaptor.members">Members</a>
- </h5>
-<pre class="programlisting"><span class="identifier">Allocator</span><span class="special">&amp;</span> <span class="identifier">base</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span>
-</pre>
-<p>
- <span class="bold"><strong>Returns:</strong></span> <code class="computeroutput"><span class="keyword">static_cast</span><span class="special">&lt;</span><span class="identifier">Allocator</span><span class="special">&amp;&gt;(*</span><span class="keyword">this</span><span class="special">)</span></code>
- </p>
-<pre class="programlisting"><span class="keyword">const</span> <span class="identifier">Allocator</span><span class="special">&amp;</span> <span class="identifier">base</span><span class="special">()</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span>
-</pre>
-<p>
- <span class="bold"><strong>Returns:</strong></span> <code class="computeroutput"><span class="keyword">static_cast</span><span class="special">&lt;</span><span class="keyword">const</span> <span class="identifier">Allocator</span><span class="special">&amp;&gt;(*</span><span class="keyword">this</span><span class="special">)</span></code>
- </p>
-<pre class="programlisting"><span class="identifier">pointer</span> <span class="identifier">allocate</span><span class="special">(</span><span class="identifier">size_type</span> <span class="identifier">size</span><span class="special">);</span>
-</pre>
-<p>
- <span class="bold"><strong>Returns:</strong></span> A pointer to the initial element
- of an array of storage of size <code class="computeroutput"><span class="identifier">n</span>
- <span class="special">*</span> <span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">value_type</span><span class="special">)</span></code>, aligned on the maximum of the minimum alignment
- specified and the alignment of objects of type <code class="computeroutput"><span class="identifier">value_type</span></code>.
- </p>
-<p>
- <span class="bold"><strong>Remark:</strong></span> The storage is obtained by calling
- <code class="computeroutput"><span class="identifier">A2</span><span class="special">::</span><span class="identifier">allocate</span></code> on an object <code class="computeroutput"><span class="identifier">a2</span></code>,
- where <code class="computeroutput"><span class="identifier">a2</span></code> of type <code class="computeroutput"><span class="identifier">A2</span></code> 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>
- is unspecified.
- </p>
-<p>
- <span class="bold"><strong>Throws:</strong></span> Throws an exception thrown from
- <code class="computeroutput"><span class="identifier">A2</span><span class="special">::</span><span class="identifier">allocate</span></code> if the storage cannot be obtained.
- </p>
-<pre class="programlisting"><span class="identifier">pointer</span> <span class="identifier">allocate</span><span class="special">(</span><span class="identifier">size_type</span> <span class="identifier">size</span><span class="special">,</span> <span class="identifier">const_void_pointer</span> <span class="identifier">hint</span><span class="special">);</span>
-</pre>
-<p>
- <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="identifier">hint</span></code>
- is a value obtained by calling <code class="computeroutput"><span class="identifier">allocate</span><span class="special">()</span></code> on any equivalent aligned allocator adaptor
- object, or else <code class="computeroutput"><span class="keyword">nullptr</span></code>.
- </p>
-<p>
- <span class="bold"><strong>Returns:</strong></span> A pointer to the initial element
- of an array of storage of size <code class="computeroutput"><span class="identifier">n</span>
- <span class="special">*</span> <span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">value_type</span><span class="special">)</span></code>, aligned on the maximum of the minimum alignment
- specified and the alignment of objects of type <code class="computeroutput"><span class="identifier">value_type</span></code>.
- </p>
-<p>
- <span class="bold"><strong>Remark:</strong></span> The storage is obtained by calling
- <code class="computeroutput"><span class="identifier">A2</span><span class="special">::</span><span class="identifier">allocate</span></code> on an object <code class="computeroutput"><span class="identifier">a2</span></code>,
- where <code class="computeroutput"><span class="identifier">a2</span></code> of type <code class="computeroutput"><span class="identifier">A2</span></code> 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>
- is unspecified.
- </p>
-<p>
- <span class="bold"><strong>Throws:</strong></span> Throws an exception thrown from
- <code class="computeroutput"><span class="identifier">A2</span><span class="special">::</span><span class="identifier">allocate</span></code> if the storage cannot be obtained.
- </p>
-<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">deallocate</span><span class="special">(</span><span class="identifier">pointer</span> <span class="identifier">ptr</span><span class="special">,</span> <span class="identifier">size_type</span> <span class="identifier">size</span><span class="special">);</span>
-</pre>
-<p>
- <span class="bold"><strong>Requires:</strong></span>
- </p>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<div class="toc"><dl class="toc">
+<dt><span class="section"><a href="reference.html#align.reference.classes.aligned_allocator">aligned_allocator</a></span></dt>
+<dt><span class="section"><a href="reference.html#align.reference.classes.aligned_allocator_adaptor">aligned_allocator_adaptor</a></span></dt>
+<dt><span class="section"><a href="reference.html#align.reference.classes.aligned_delete">aligned_delete</a></span></dt>
+</dl></div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<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>
+</h4></div></div></div>
+<p>
+ <code class="computeroutput"><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="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">Alignment</span> <span class="special">=</span>
+ <span class="number">1</span><span class="special">&gt;</span> <span class="keyword">class</span> <span class="identifier">aligned_allocator</span><span class="special">;</span></code>
+ </p>
+<p>
+ <code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">Alignment</span><span class="special">&gt;</span> <span class="keyword">class</span> <span class="identifier">aligned_allocator</span><span class="special">&lt;</span><span class="keyword">void</span><span class="special">,</span> <span class="identifier">Alignment</span><span class="special">&gt;;</span></code>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Header</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span></code>
+ </p></dd>
+<dt><span class="term">Note</span></dt>
+<dd><p>
+ Using the aligned allocator with a minimum Alignment value is generally
+ only useful with containers that are not node-based such as <code class="computeroutput"><span class="identifier">vector</span></code>. With node-based containers,
+ such as <code class="computeroutput"><span class="identifier">list</span></code>, the
+ node object would have the minimum alignment instead of the value
+ type object.
+ </p></dd>
+</dl>
+</div>
+<h6>
+<a name="align.reference.classes.aligned_allocator.h0"></a>
+ <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
+ types</a>
+ </h6>
+<div class="orderedlist"><ol class="orderedlist" type="1">
<li class="listitem">
- <code class="computeroutput"><span class="identifier">ptr</span></code> shall be a pointer
- value obtained from <code class="computeroutput"><span class="identifier">allocate</span><span class="special">()</span></code>
- </li>
+ <code class="computeroutput"><span class="keyword">typedef</span> <span class="identifier">T</span>
+ <span class="identifier">value_type</span><span class="special">;</span></code>
+ </li>
<li class="listitem">
- <code class="computeroutput"><span class="identifier">size</span></code> shall equal the
- value passed as the first argument to the invocation 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>
- </li>
-</ul></div>
-<p>
- <span class="bold"><strong>Effects:</strong></span> Deallocates the storage referenced
- by <code class="computeroutput"><span class="identifier">ptr</span></code>.
- </p>
-<p>
- <span class="bold"><strong>Note:</strong></span> Uses <code class="computeroutput"><span class="identifier">A2</span><span class="special">::</span><span class="identifier">deallocate</span></code>
- on an object <code class="computeroutput"><span class="identifier">a2</span></code>, where <code class="computeroutput"><span class="identifier">a2</span></code> of type <code class="computeroutput"><span class="identifier">A2</span></code>
- 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>
- is unspecified.
- </p>
-<h5>
-<a name="align.reference.aligned_allocator_adaptor.h4"></a>
- <span class="phrase"><a name="align.reference.aligned_allocator_adaptor.globals"></a></span><a class="link" href="reference.html#align.reference.aligned_allocator_adaptor.globals">Globals</a>
- </h5>
-<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</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">&gt;</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">&lt;</span><span class="identifier">A1</span><span class="special">,</span>
- <span class="identifier">Alignment</span><span class="special">&gt;&amp;</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">&lt;</span><span class="identifier">A2</span><span class="special">,</span>
- <span class="identifier">Alignment</span><span class="special">&gt;&amp;</span> <span class="identifier">a2</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span>
-</pre>
-<p>
- <span class="bold"><strong>Returns:</strong></span> <code class="computeroutput"><span class="identifier">a1</span><span class="special">.</span><span class="identifier">base</span><span class="special">()</span>
- <span class="special">==</span> <span class="identifier">a2</span><span class="special">.</span><span class="identifier">base</span><span class="special">()</span></code>
- </p>
-<pre class="programlisting"><span class="keyword">template</span><span class="special">&lt;</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">&gt;</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">&lt;</span><span class="identifier">A1</span><span class="special">,</span>
- <span class="identifier">Alignment</span><span class="special">&gt;&amp;</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">&lt;</span><span class="identifier">A2</span><span class="special">,</span>
- <span class="identifier">Alignment</span><span class="special">&gt;&amp;</span> <span class="identifier">a2</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span>
-</pre>
-<p>
- <span class="bold"><strong>Returns:</strong></span> <code class="computeroutput"><span class="special">!(</span><span class="identifier">a1</span> <span class="special">==</span> <span class="identifier">a2</span><span class="special">)</span></code>
- </p>
+ <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>
+ </li>
+<li class="listitem">
+ <code class="computeroutput"><span class="keyword">typedef</span> <span class="keyword">const</span>
+ <span class="identifier">T</span><span class="special">*</span>
+ <span class="identifier">const_pointer</span><span class="special">;</span></code>
+ </li>
+<li class="listitem">
+ <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>
+ </li>
+<li class="listitem">
+ <code class="computeroutput"><span class="keyword">typedef</span> <span class="keyword">const</span>
+ <span class="keyword">void</span><span class="special">*</span>
+ <span class="identifier">const_void_pointer</span><span class="special">;</span></code>
+ </li>
+<li class="listitem">
+ <code class="computeroutput"><span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span>
+ <span class="identifier">size_type</span><span class="special">;</span></code>
+ </li>
+<li class="listitem">
+ <code class="computeroutput"><span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">ptrdiff_t</span>
+ <span class="identifier">difference_type</span><span class="special">;</span></code>
+ </li>
+<li class="listitem">
+ <code class="computeroutput"><span class="keyword">typedef</span> <span class="identifier">T</span><span class="special">&amp;</span> <span class="identifier">reference</span><span class="special">;</span></code>
+ </li>
+<li class="listitem">
+ <code class="computeroutput"><span class="keyword">typedef</span> <span class="keyword">const</span>
+ <span class="identifier">T</span><span class="special">&amp;</span>
+ <span class="identifier">const_reference</span><span class="special">;</span></code>
+ </li>
+<li class="listitem">
+ <code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">&gt;</span> <span class="keyword">struct</span>
+ <span class="identifier">rebind</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">aligned_allocator</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">,</span> <span class="identifier">Alignment</span><span class="special">&gt;</span> <span class="identifier">other</span><span class="special">;</span> <span class="special">};</span></code>
+ </li>
+</ol></div>
+<h6>
+<a name="align.reference.classes.aligned_allocator.h1"></a>
+ <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>
+ </h6>
+<div class="orderedlist"><ol class="orderedlist" type="1">
+<li class="listitem">
+<p class="simpara">
+ <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>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Effects</span></dt>
+<dd><p>
+ Constructs the allocator.
+ </p></dd>
+</dl>
+</div>
+</li>
+<li class="listitem">
+<p class="simpara">
+ <code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">&gt;</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">&lt;</span><span class="identifier">U</span><span class="special">,</span> <span class="identifier">Alignment</span><span class="special">&gt;&amp;)</span>
+ <span class="keyword">noexcept</span><span class="special">;</span></code>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Effects</span></dt>
+<dd><p>
+ Constructs the allocator.
+ </p></dd>
+</dl>
+</div>
+</li>
+</ol></div>
+<h6>
+<a name="align.reference.classes.aligned_allocator.h2"></a>
+ <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
+ functions</a>
+ </h6>
+<p>
+ Except for the destructor, member functions of the aligned allocator shall
+ not introduce data races as a result of concurrent calls to those member
+ functions from different threads. Calls to these functions that allocate
+ or deallocate a particular unit of storage shall occur in a single total
+ order, and each such deallocation call shall happen before the next allocation
+ (if any) in this order.
+ </p>
+<div class="orderedlist"><ol class="orderedlist" type="1">
+<li class="listitem">
+<p class="simpara">
+ <code class="computeroutput"><span class="identifier">pointer</span> <span class="identifier">address</span><span class="special">(</span><span class="identifier">reference</span>
+ <span class="identifier">value</span><span class="special">)</span>
+ <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span></code>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Returns</span></dt>
+<dd><p>
+ The actual address of the object referenced by <code class="computeroutput"><span class="identifier">value</span></code>, even in the presence
+ of an overloaded <code class="computeroutput"><span class="keyword">operator</span><span class="special">&amp;</span></code>.
+ </p></dd>
+</dl>
+</div>
+</li>
+<li class="listitem">
+<p class="simpara">
+ <code class="computeroutput"><span class="identifier">const_pointer</span> <span class="identifier">address</span><span class="special">(</span><span class="identifier">const_reference</span>
+ <span class="identifier">value</span><span class="special">)</span>
+ <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span></code>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Returns</span></dt>
+<dd><p>
+ The actual address of the object referenced by <code class="computeroutput"><span class="identifier">value</span></code>, even in the presence
+ of an overloaded <code class="computeroutput"><span class="keyword">operator</span><span class="special">&amp;</span></code>.
+ </p></dd>
+</dl>
+</div>
+</li>
+<li class="listitem">
+<p class="simpara">
+ <code class="computeroutput"><span class="identifier">pointer</span> <span class="identifier">allocate</span><span class="special">(</span><span class="identifier">size_type</span>
+ <span class="identifier">size</span><span class="special">,</span>
+ <span class="identifier">const_void_pointer</span> <span class="special">=</span>
+ <span class="number">0</span><span class="special">);</span></code>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Returns</span></dt>
+<dd><p>
+ A pointer to the initial element of an array of storage of size
+ <code class="computeroutput"><span class="identifier">n</span> <span class="special">*</span>
+ <span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">T</span><span class="special">)</span></code>,
+ aligned on the maximum of the minimum alignment specified and
+ the alignment of objects of type <code class="computeroutput"><span class="identifier">T</span></code>.
+ </p></dd>
+<dt><span class="term">Remark</span></dt>
+<dd><p>
+ 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>.
+ </p></dd>
+<dt><span class="term">Throws</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">bad_alloc</span></code> if the storage cannot
+ be obtained.
+ </p></dd>
+</dl>
+</div>
+</li>
+<li class="listitem">
+<p class="simpara">
+ <code class="computeroutput"><span class="keyword">void</span> <span class="identifier">deallocate</span><span class="special">(</span><span class="identifier">pointer</span>
+ <span class="identifier">ptr</span><span class="special">,</span>
+ <span class="identifier">size_type</span><span class="special">);</span></code>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Requires</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">ptr</span></code> shall be
+ a pointer value obtained from <code class="computeroutput"><span class="identifier">allocate</span><span class="special">()</span></code>.
+ </p></dd>
+<dt><span class="term">Effects</span></dt>
+<dd><p>
+ Deallocates the storage referenced by <code class="computeroutput"><span class="identifier">ptr</span></code>.
+ </p></dd>
+<dt><span class="term">Remark</span></dt>
+<dd><p>
+ Uses <code class="computeroutput"><span class="identifier">aligned_free</span><span class="special">(</span><span class="keyword">void</span><span class="special">*)</span></code>.
+ </p></dd>
+</dl>
+</div>
+</li>
+<li class="listitem">
+<p class="simpara">
+ <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>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Returns</span></dt>
+<dd><p>
+ The largest value <code class="computeroutput"><span class="identifier">N</span></code>
+ 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.
+ </p></dd>
+</dl>
+</div>
+</li>
+<li class="listitem">
+<p class="simpara">
+ <code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</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">&gt;</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">&amp;&amp;...</span>
+ <span class="identifier">args</span><span class="special">);</span></code>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Effects</span></dt>
+<dd><p>
+ <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">&lt;</span><span class="identifier">Args</span><span class="special">&gt;(</span><span class="identifier">args</span><span class="special">)...)</span></code>.
+ </p></dd>
+</dl>
+</div>
+</li>
+<li class="listitem">
+<p class="simpara">
+ <code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">&gt;</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>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Effects</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">ptr</span><span class="special">-&gt;~</span><span class="identifier">U</span><span class="special">()</span></code>.
+ </p></dd>
+</dl>
+</div>
+</li>
+</ol></div>
+<h6>
+<a name="align.reference.classes.aligned_allocator.h3"></a>
+ <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
+ operators</a>
+ </h6>
+<div class="orderedlist"><ol class="orderedlist" type="1">
+<li class="listitem">
+<p class="simpara">
+ <code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</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">&gt;</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">&lt;</span><span class="identifier">T1</span><span class="special">,</span> <span class="identifier">Alignment</span><span class="special">&gt;&amp;,</span> <span class="keyword">const</span>
+ <span class="identifier">aligned_allocator</span><span class="special">&lt;</span><span class="identifier">T2</span><span class="special">,</span> <span class="identifier">Alignment</span><span class="special">&gt;&amp;)</span>
+ <span class="keyword">noexcept</span><span class="special">;</span></code>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Returns</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="keyword">true</span></code>
+ </p></dd>
+</dl>
+</div>
+</li>
+<li class="listitem">
+<p class="simpara">
+ <code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</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">&gt;</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">&lt;</span><span class="identifier">T1</span><span class="special">,</span> <span class="identifier">Alignment</span><span class="special">&gt;&amp;,</span> <span class="keyword">const</span>
+ <span class="identifier">aligned_allocator</span><span class="special">&lt;</span><span class="identifier">T2</span><span class="special">,</span> <span class="identifier">Alignment</span><span class="special">&gt;&amp;)</span>
+ <span class="keyword">noexcept</span><span class="special">;</span></code>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Returns</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="keyword">false</span></code>
+ </p></dd>
+</dl>
+</div>
+</li>
+</ol></div>
</div>
<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="align.reference.aligned_delete"></a><a class="link" href="reference.html#align.reference.aligned_delete" title="aligned_delete">aligned_delete</a>
-</h3></div></div></div>
-<p>
- The aligned deleter class is convenient utility for destroying and then deallocating
- the constructed objects that were allocated using aligned allocation function
- provided in this library. It serves as a replacement for the <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">default_delete</span></code>
- class for this case.
- </p>
-<h5>
-<a name="align.reference.aligned_delete.h0"></a>
- <span class="phrase"><a name="align.reference.aligned_delete.synopsis"></a></span><a class="link" href="reference.html#align.reference.aligned_delete.synopsis">Header
- &lt;boost/align/aligned_delete.hpp&gt;</a>
- </h5>
-<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
- <span class="keyword">namespace</span> <span class="identifier">alignment</span> <span class="special">{</span>
- <span class="keyword">class</span> <span class="identifier">aligned_delete</span><span class="special">;</span>
- <span class="special">}</span>
-<span class="special">}</span>
-</pre>
-<h5>
-<a name="align.reference.aligned_delete.h1"></a>
- <span class="phrase"><a name="align.reference.aligned_delete.aligned_delete"></a></span><a class="link" href="reference.html#align.reference.aligned_delete.aligned_delete">Class
- aligned_delete</a>
- </h5>
-<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">aligned_delete</span> <span class="special">{</span>
-<span class="keyword">public</span><span class="special">:</span>
- <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</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">const</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">-&gt;~</span><span class="identifier">T</span><span class="special">()));</span>
-<span class="special">};</span>
-</pre>
-<h5>
-<a name="align.reference.aligned_delete.h2"></a>
- <span class="phrase"><a name="align.reference.aligned_delete.members"></a></span><a class="link" href="reference.html#align.reference.aligned_delete.members">Members</a>
- </h5>
-<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">&gt;</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">const</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">-&gt;~</span><span class="identifier">T</span><span class="special">()));</span>
-</pre>
-<p>
- <span class="bold"><strong>Effects:</strong></span> 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> to destroy the object
- and then calls <code class="computeroutput"><span class="identifier">alignment</span><span class="special">::</span><span class="identifier">aligned_free</span></code>
- on <code class="computeroutput"><span class="identifier">ptr</span></code> to free the allocated
- memory.
- </p>
-<p>
- <span class="bold"><strong>Note:</strong></span> If <code class="computeroutput"><span class="identifier">T</span></code>
- is an incomplete type, the program is ill-formed.
- </p>
+<div class="titlepage"><div><div><h4 class="title">
+<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>
+</h4></div></div></div>
+<p>
+ <code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</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> <span class="identifier">Alignment</span> <span class="special">=</span>
+ <span class="number">1</span><span class="special">&gt;</span> <span class="keyword">class</span> <span class="identifier">aligned_allocator_adaptor</span><span class="special">;</span></code>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Header</span></dt>
+<dd>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span></code>
+ </dd>
+<dt><span class="term">Note</span></dt>
+<dd><p>
+ This adaptor can be used with a C++11 Allocator whose pointer type
+ is a smart pointer but the adaptor can choose to expose only raw
+ pointer types.
+ </p></dd>
+</dl>
+</div>
+<h6>
+<a name="align.reference.classes.aligned_allocator_adaptor.h0"></a>
+ <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
+ types</a>
+ </h6>
+<div class="orderedlist"><ol class="orderedlist" type="1">
+<li class="listitem">
+ <code class="computeroutput"><span class="keyword">typedef</span> <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>
+ </li>
+<li class="listitem">
+ <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>
+ </li>
+<li class="listitem">
+ <code class="computeroutput"><span class="keyword">typedef</span> <span class="keyword">const</span>
+ <span class="identifier">value_type</span><span class="special">*</span>
+ <span class="identifier">const_pointer</span><span class="special">;</span></code>
+ </li>
+<li class="listitem">
+ <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>
+ </li>
+<li class="listitem">
+ <code class="computeroutput"><span class="keyword">typedef</span> <span class="keyword">const</span>
+ <span class="keyword">void</span><span class="special">*</span>
+ <span class="identifier">const_void_pointer</span><span class="special">;</span></code>
+ </li>
+<li class="listitem">
+ <code class="computeroutput"><span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span>
+ <span class="identifier">size_type</span><span class="special">;</span></code>
+ </li>
+<li class="listitem">
+ <code class="computeroutput"><span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">ptrdiff_t</span>
+ <span class="identifier">difference_type</span><span class="special">;</span></code>
+ </li>
+<li class="listitem">
+ <code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">&gt;</span> <span class="keyword">struct</span>
+ <span class="identifier">rebind</span> <span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">aligned_allocator_adaptor</span><span class="special">&lt;</span><span class="keyword">typename</span>
+ <span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator_traits</span><span class="special">&lt;</span><span class="identifier">Allocator</span><span class="special">&gt;::</span><span class="keyword">template</span> <span class="identifier">rebind_alloc</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;,</span> <span class="identifier">Alignment</span><span class="special">&gt;</span> <span class="identifier">other</span><span class="special">;</span> <span class="special">};</span></code>
+ </li>
+</ol></div>
+<h6>
+<a name="align.reference.classes.aligned_allocator_adaptor.h1"></a>
+ <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>
+ </h6>
+<div class="orderedlist"><ol class="orderedlist" type="1">
+<li class="listitem">
+<p class="simpara">
+ <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>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Effects</span></dt>
+<dd><p>
+ Value-initializes the <code class="computeroutput"><span class="identifier">Allocator</span></code>
+ base class.
+ </p></dd>
+</dl>
+</div>
+</li>
+<li class="listitem">
+<p class="simpara">
+ <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">aligned_allocator_adaptor</span><span class="special">(</span><span class="identifier">A</span><span class="special">&amp;&amp;</span> <span class="identifier">alloc</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span></code>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Requires</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">Allocator</span></code> shall
+ be constructible from <code class="computeroutput"><span class="identifier">A</span></code>.
+ </p></dd>
+<dt><span class="term">Effects</span></dt>
+<dd><p>
+ Initializes the <code class="computeroutput"><span class="identifier">Allocator</span></code>
+ base class with <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">forward</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;(</span><span class="identifier">alloc</span><span class="special">)</span></code>.
+ </p></dd>
+</dl>
+</div>
+</li>
+<li class="listitem">
+<p class="simpara">
+ <code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">&gt;</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">&lt;</span><span class="identifier">U</span><span class="special">,</span> <span class="identifier">Alignment</span><span class="special">&gt;&amp;</span>
+ <span class="identifier">other</span><span class="special">)</span>
+ <span class="keyword">noexcept</span><span class="special">;</span></code>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Requires</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">Allocator</span></code> shall
+ be constructible from <code class="computeroutput"><span class="identifier">A</span></code>.
+ </p></dd>
+<dt><span class="term">Effects</span></dt>
+<dd><p>
+ Initializes the <code class="computeroutput"><span class="identifier">Allocator</span></code>
+ 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>.
+ </p></dd>
+</dl>
+</div>
+</li>
+</ol></div>
+<h6>
+<a name="align.reference.classes.aligned_allocator_adaptor.h2"></a>
+ <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
+ functions</a>
+ </h6>
+<div class="orderedlist"><ol class="orderedlist" type="1">
+<li class="listitem">
+<p class="simpara">
+ <code class="computeroutput"><span class="identifier">Allocator</span><span class="special">&amp;</span>
+ <span class="identifier">base</span><span class="special">()</span>
+ <span class="keyword">noexcept</span><span class="special">;</span></code>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Returns</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="keyword">static_cast</span><span class="special">&lt;</span><span class="identifier">Allocator</span><span class="special">&amp;&gt;(*</span><span class="keyword">this</span><span class="special">)</span></code>
+ </p></dd>
+</dl>
+</div>
+</li>
+<li class="listitem">
+<p class="simpara">
+ <code class="computeroutput"><span class="keyword">const</span> <span class="identifier">Allocator</span><span class="special">&amp;</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>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Returns</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="keyword">static_cast</span><span class="special">&lt;</span><span class="keyword">const</span> <span class="identifier">Allocator</span><span class="special">&amp;&gt;(*</span><span class="keyword">this</span><span class="special">)</span></code>
+ </p></dd>
+</dl>
+</div>
+</li>
+<li class="listitem">
+<p class="simpara">
+ <code class="computeroutput"><span class="identifier">pointer</span> <span class="identifier">allocate</span><span class="special">(</span><span class="identifier">size_type</span>
+ <span class="identifier">size</span><span class="special">);</span></code>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Returns</span></dt>
+<dd><p>
+ A pointer to the initial element of an array of storage of size
+ <code class="computeroutput"><span class="identifier">n</span> <span class="special">*</span>
+ <span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">value_type</span><span class="special">)</span></code>,
+ aligned on the maximum of the minimum alignment specified and
+ the alignment of objects of type <code class="computeroutput"><span class="identifier">value_type</span></code>.
+ </p></dd>
+<dt><span class="term">Remark</span></dt>
+<dd><p>
+ 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>
+ of type <code class="computeroutput"><span class="identifier">A2</span></code> is
+ a rebind 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>
+ is implementation defined.
+ </p></dd>
+<dt><span class="term">Throws</span></dt>
+<dd><p>
+ 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 obtained.
+ </p></dd>
+</dl>
+</div>
+</li>
+<li class="listitem">
+<p class="simpara">
+ <code class="computeroutput"><span class="identifier">pointer</span> <span class="identifier">allocate</span><span class="special">(</span><span class="identifier">size_type</span>
+ <span class="identifier">size</span><span class="special">,</span>
+ <span class="identifier">const_void_pointer</span> <span class="identifier">hint</span><span class="special">);</span></code>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Requires</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">hint</span></code> is a value
+ obtained by calling <code class="computeroutput"><span class="identifier">allocate</span><span class="special">()</span></code> on any equivalent allocator
+ object, or else a null pointer.
+ </p></dd>
+<dt><span class="term">Returns</span></dt>
+<dd><p>
+ A pointer to the initial element of an array of storage of size
+ <code class="computeroutput"><span class="identifier">n</span> <span class="special">*</span>
+ <span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">value_type</span><span class="special">)</span></code>,
+ aligned on the maximum of the minimum alignment specified and
+ the alignment of objects of type <code class="computeroutput"><span class="identifier">value_type</span></code>.
+ </p></dd>
+<dt><span class="term">Remark</span></dt>
+<dd><p>
+ 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>
+ of type <code class="computeroutput"><span class="identifier">A2</span></code> is
+ a rebind 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>
+ is an implementation defined.
+ </p></dd>
+<dt><span class="term">Throws</span></dt>
+<dd><p>
+ 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 obtained.
+ </p></dd>
+</dl>
+</div>
+</li>
+<li class="listitem">
+<p class="simpara">
+ <code class="computeroutput"><span class="keyword">void</span> <span class="identifier">deallocate</span><span class="special">(</span><span class="identifier">pointer</span>
+ <span class="identifier">ptr</span><span class="special">,</span>
+ <span class="identifier">size_type</span> <span class="identifier">size</span><span class="special">);</span></code>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Requires</span></dt>
+<dd><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<li class="listitem">
+ <code class="computeroutput"><span class="identifier">ptr</span></code> shall
+ be a pointer value obtained from <code class="computeroutput"><span class="identifier">allocate</span><span class="special">()</span></code>
+ </li>
+<li class="listitem">
+ <code class="computeroutput"><span class="identifier">size</span></code> shall
+ equal the value passed as the first argument to the invocation
+ 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>.
+ </li>
+</ul></div></dd>
+<dt><span class="term">Effects</span></dt>
+<dd>
+ Deallocates the storage referenced by <code class="computeroutput"><span class="identifier">ptr</span></code>.
+ </dd>
+<dt><span class="term">Note</span></dt>
+<dd><p>
+ Uses <code class="computeroutput"><span class="identifier">A2</span><span class="special">::</span><span class="identifier">deallocate</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> of type
+ <code class="computeroutput"><span class="identifier">A2</span></code> 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>
+ is implementation defined.
+ </p></dd>
+</dl>
+</div>
+</li>
+</ol></div>
+<h6>
+<a name="align.reference.classes.aligned_allocator_adaptor.h3"></a>
+ <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
+ operators</a>
+ </h6>
+<div class="orderedlist"><ol class="orderedlist" type="1">
+<li class="listitem">
+<p class="simpara">
+ <code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</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">&gt;</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">&lt;</span><span class="identifier">A1</span><span class="special">,</span> <span class="identifier">Alignment</span><span class="special">&gt;&amp;</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">&lt;</span><span class="identifier">A2</span><span class="special">,</span> <span class="identifier">Alignment</span><span class="special">&gt;&amp;</span>
+ <span class="identifier">a2</span><span class="special">)</span>
+ <span class="keyword">noexcept</span><span class="special">;</span></code>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Returns</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">a1</span><span class="special">.</span><span class="identifier">base</span><span class="special">()</span>
+ <span class="special">==</span> <span class="identifier">a2</span><span class="special">.</span><span class="identifier">base</span><span class="special">()</span></code>
+ </p></dd>
+</dl>
+</div>
+</li>
+<li class="listitem">
+<p class="simpara">
+ <code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</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">&gt;</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">&lt;</span><span class="identifier">A1</span><span class="special">,</span> <span class="identifier">Alignment</span><span class="special">&gt;&amp;</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">&lt;</span><span class="identifier">A2</span><span class="special">,</span> <span class="identifier">Alignment</span><span class="special">&gt;&amp;</span>
+ <span class="identifier">a2</span><span class="special">)</span>
+ <span class="keyword">noexcept</span><span class="special">;</span></code>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Returns</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="special">!(</span><span class="identifier">a1</span>
+ <span class="special">==</span> <span class="identifier">a2</span><span class="special">)</span></code>
+ </p></dd>
+</dl>
+</div>
+</li>
+</ol></div>
+</div>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<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>
+</h4></div></div></div>
+<p>
+ <code class="computeroutput"><span class="keyword">class</span> <span class="identifier">aligned_delete</span><span class="special">;</span></code>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Header</span></dt>
+<dd>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span></code>
+ </dd>
+</dl>
+</div>
+<h6>
+<a name="align.reference.classes.aligned_delete.h0"></a>
+ <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
+ operators</a>
+ </h6>
+<div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
+<p class="simpara">
+ <code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</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">-&gt;~</span><span class="identifier">T</span><span class="special">()));</span></code>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Effects</span></dt>
+<dd><p>
+ 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>
+ 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>
+ to free the allocated memory.
+ </p></dd>
+<dt><span class="term">Note</span></dt>
+<dd><p>
+ If <code class="computeroutput"><span class="identifier">T</span></code> is an incomplete
+ type, the program is ill-formed.
+ </p></dd>
+</dl>
+</div>
+</li></ol></div>
+</div>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
-<a name="align.reference.alignment_of"></a><a class="link" href="reference.html#align.reference.alignment_of" title="alignment_of">alignment_of</a>
+<a name="align.reference.traits"></a><a class="link" href="reference.html#align.reference.traits" title="Traits">Traits</a>
</h3></div></div></div>
-<p>
- The alignment type trait is used to query the alignment requirement of a
- type at compile time. It is provided by the C++11 standard library but is
- provided in this library for C++11 and C++03 implementations that do not
- provide this functionality.
- </p>
-<h5>
-<a name="align.reference.alignment_of.h0"></a>
- <span class="phrase"><a name="align.reference.alignment_of.synopsis"></a></span><a class="link" href="reference.html#align.reference.alignment_of.synopsis">Header
- &lt;boost/align/alignment_of.hpp&gt;</a>
- </h5>
-<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
- <span class="keyword">namespace</span> <span class="identifier">alignment</span> <span class="special">{</span>
- <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
- <span class="keyword">struct</span> <span class="identifier">alignment_of</span><span class="special">;</span>
-
- <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
- <span class="keyword">constexpr</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">alignment_of_v</span> <span class="special">=</span> <span class="identifier">alignment_of</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">;</span>
- <span class="special">}</span>
-<span class="special">}</span>
-</pre>
-<h5>
-<a name="align.reference.alignment_of.h1"></a>
- <span class="phrase"><a name="align.reference.alignment_of.alignment_of"></a></span><a class="link" href="reference.html#align.reference.alignment_of.alignment_of">Type
- trait alignment_of</a>
- </h5>
-<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">&gt;</span>
-<span class="keyword">struct</span> <span class="identifier">alignment_of</span><span class="special">;</span>
-</pre>
-<p>
- <span class="bold"><strong>Value:</strong></span> The alignment requirement of the
- type <code class="computeroutput"><span class="identifier">T</span></code> 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>. When <code class="computeroutput"><span class="identifier">T</span></code>
- is a reference array type, the value shall be the alignment of the referenced
- type. When <code class="computeroutput"><span class="identifier">T</span></code> is an array
- type, the value shall be the alignment of the element type.
- </p>
-<p>
- <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="identifier">T</span></code>
- shall be a complete object type, or an array thereof, or a reference to one
- of those types.
- </p>
+<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>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<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>
+</h4></div></div></div>
+<p>
+ <code class="computeroutput"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">alignment_of</span><span class="special">;</span></code>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Header</span></dt>
+<dd>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span></code>
+ </dd>
+<dt><span class="term">Value</span></dt>
+<dd><p>
+ The alignment requirement of the type <code class="computeroutput"><span class="identifier">T</span></code>
+ 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>.
+ When <code class="computeroutput"><span class="identifier">T</span></code> is a reference
+ array type, the value shall be the alignment of the referenced type.
+ When <code class="computeroutput"><span class="identifier">T</span></code> is an array
+ type, the value shall be the alignment of the element type.
+ </p></dd>
+<dt><span class="term">Requires</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="identifier">T</span></code> shall be a complete
+ object type, or an array thereof, or a reference to one of those
+ types.
+ </p></dd>
+</dl>
+</div>
+</div>
</div>
<div class="section">
<div class="titlepage"><div><div><h3 class="title">
-<a name="align.reference.assume_aligned"></a><a class="link" href="reference.html#align.reference.assume_aligned" title="assume_aligned">assume_aligned</a>
+<a name="align.reference.macros"></a><a class="link" href="reference.html#align.reference.macros" title="Macros">Macros</a>
</h3></div></div></div>
-<p>
- The alignment hint macro can be used to inform the compiler of the alignment
- of a memory block, to enable vectorizing or other compiler specific alignment
- related optimizations.
- </p>
-<h5>
-<a name="align.reference.assume_aligned.h0"></a>
- <span class="phrase"><a name="align.reference.assume_aligned.synopsis"></a></span><a class="link" href="reference.html#align.reference.assume_aligned.synopsis">Header
- &lt;boost/align/assume_aligned.hpp&gt;</a>
- </h5>
-<pre class="programlisting"><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>
-</pre>
-<h5>
-<a name="align.reference.assume_aligned.h1"></a>
- <span class="phrase"><a name="align.reference.assume_aligned.assume_aligned"></a></span><a class="link" href="reference.html#align.reference.assume_aligned.assume_aligned">Macro
- BOOST_ALIGN_ASSUME_ALIGNED</a>
- </h5>
-<pre class="programlisting"><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>
-</pre>
-<p>
- <span class="bold"><strong>Requires:</strong></span>
- </p>
-<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
+<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>
+<div class="section">
+<div class="titlepage"><div><div><h4 class="title">
+<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>
+</h4></div></div></div>
+<p>
+ <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>
+ </p>
+<div class="variablelist">
+<p class="title"><b></b></p>
+<dl class="variablelist">
+<dt><span class="term">Header</span></dt>
+<dd><p>
+ <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span></code>
+ </p></dd>
+<dt><span class="term">Requires</span></dt>
+<dd><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
- <code class="computeroutput"><span class="identifier">alignment</span></code> shall be a
- power of two
- </li>
+ <code class="computeroutput"><span class="identifier">alignment</span></code> shall
+ be a power of two
+ </li>
<li class="listitem">
- <code class="computeroutput"><span class="identifier">ptr</span></code> shall be mutable
- </li>
-</ul></div>
-<p>
- <span class="bold"><strong>Effect:</strong></span> <code class="computeroutput"><span class="identifier">ptr</span></code>
- may be modified in an implementation specific way to inform the compiler
- of its alignment.
- </p>
+ <code class="computeroutput"><span class="identifier">ptr</span></code> shall be
+ mutable
+ </li>
+</ul></div></dd>
+<dt><span class="term">Effects</span></dt>
+<dd>
+ <code class="computeroutput"><span class="identifier">ptr</span></code> may be modified
+ in an implementation specific way to inform the compiler of its alignment.
+ </dd>
+</dl>
+</div>
</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="align.reference.is_aligned"></a><a class="link" href="reference.html#align.reference.is_aligned" title="is_aligned">is_aligned</a>
-</h3></div></div></div>
-<p>
- The alignment validation function indicates whether or not an address is
- a multiple of the specified alignment value. It is generally useful in assertions
- to verify memory is correctly aligned. This functionality is not yet provided
- by the C++ standard.
- </p>
-<h5>
-<a name="align.reference.is_aligned.h0"></a>
- <span class="phrase"><a name="align.reference.is_aligned.synopsis"></a></span><a class="link" href="reference.html#align.reference.is_aligned.synopsis">Header
- &lt;boost/align/is_aligned.hpp&gt;</a>
- </h5>
-<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
- <span class="keyword">namespace</span> <span class="identifier">alignment</span> <span class="special">{</span>
- <span class="keyword">constexpr</span> <span class="keyword">bool</span> <span class="identifier">is_aligned</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_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>
-
- <span class="keyword">bool</span> <span class="identifier">is_aligned</span><span class="special">(</span><span class="keyword">const</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> <span class="identifier">alignment</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span>
- <span class="special">}</span>
-<span class="special">}</span>
-</pre>
-<h5>
-<a name="align.reference.is_aligned.h1"></a>
- <span class="phrase"><a name="align.reference.is_aligned.is_aligned"></a></span><a class="link" href="reference.html#align.reference.is_aligned.is_aligned">Function
- is_aligned</a>
- </h5>
-<pre class="programlisting"><span class="keyword">bool</span> <span class="identifier">is_aligned</span><span class="special">(</span><span class="keyword">const</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> <span class="identifier">alignment</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span>
-</pre>
-<p>
- <span class="bold"><strong>Requires:</strong></span> <code class="computeroutput"><span class="identifier">alignment</span></code>
- shall be a power of two.
- </p>
-<p>
- <span class="bold"><strong>Returns:</strong></span> <code class="computeroutput"><span class="keyword">true</span></code>
- if the value of <code class="computeroutput"><span class="identifier">ptr</span></code> is aligned
- on the boundary specified by <code class="computeroutput"><span class="identifier">alignment</span></code>,
- otherwise <code class="computeroutput"><span class="keyword">false</span></code>.
- </p>
</div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2014-2016 Glen Joseph Fernandes<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2014-2017 Glen
+ Joseph Fernandes<p>
Distributed under the Boost Software License, Version 1.0.
</p>
</div></td>
diff --git a/doc/html/align/tutorial.html b/doc/html/align/tutorial.html
deleted file mode 100644
index 7bca4ee5f5..0000000000
--- a/doc/html/align/tutorial.html
+++ /dev/null
@@ -1,315 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
-<title>Tutorial</title>
-<link rel="stylesheet" href="../../../doc/src/boostbook.css" type="text/css">
-<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
-<link rel="home" href="../index.html" title="The Boost C++ Libraries BoostBook Documentation Subset">
-<link rel="up" href="../align.html" title="Chapter&#160;4.&#160;Boost.Align">
-<link rel="prev" href="rationale.html" title="Rationale">
-<link rel="next" href="examples.html" title="Examples">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
-<table cellpadding="2" width="100%"><tr>
-<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td>
-<td align="center"><a href="../../../index.html">Home</a></td>
-<td align="center"><a href="../../../libs/libraries.htm">Libraries</a></td>
-<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
-<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
-<td align="center"><a href="../../../more/index.htm">More</a></td>
-</tr></table>
-<hr>
-<div class="spirit-nav">
-<a accesskey="p" href="rationale.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="examples.html"><img src="../../../doc/src/images/next.png" alt="Next"></a>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="align.tutorial"></a><a class="link" href="tutorial.html" title="Tutorial">Tutorial</a>
-</h2></div></div></div>
-<div class="toc"><dl class="toc">
-<dt><span class="section"><a href="tutorial.html#align.tutorial.align">align</a></span></dt>
-<dt><span class="section"><a href="tutorial.html#align.tutorial.aligned_alloc">aligned_alloc and aligned_free</a></span></dt>
-<dt><span class="section"><a href="tutorial.html#align.tutorial.aligned_allocator">aligned_allocator</a></span></dt>
-<dt><span class="section"><a href="tutorial.html#align.tutorial.aligned_allocator_adaptor">aligned_allocator_adaptor</a></span></dt>
-<dt><span class="section"><a href="tutorial.html#align.tutorial.aligned_delete">aligned_delete</a></span></dt>
-<dt><span class="section"><a href="tutorial.html#align.tutorial.alignment_of">alignment_of</a></span></dt>
-<dt><span class="section"><a href="tutorial.html#align.tutorial.assume_aligned">assume_aligned</a></span></dt>
-<dt><span class="section"><a href="tutorial.html#align.tutorial.is_aligned">is_aligned</a></span></dt>
-</dl></div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="align.tutorial.align"></a><a class="link" href="tutorial.html#align.tutorial.align" title="align">align</a>
-</h3></div></div></div>
-<p>
- The alignment function can be used to find the first address of a given alignment
- value within a given buffer of a given size. It adjusts the pointer provided,
- returns that value, and decreases space by the amount advanced, if the alignment
- succeeds, provided sufficient space in the buffer. Otherwise it yields a
- null pointer to indicate failure due to insufficient space.
- </p>
-<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
-<span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
-<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="keyword">new</span><span class="special">&gt;</span>
-
-<span class="keyword">struct</span> <span class="keyword">alignas</span><span class="special">(</span><span class="number">16</span><span class="special">)</span> <span class="identifier">type</span> <span class="special">{</span>
- <span class="keyword">float</span> <span class="identifier">data</span><span class="special">[</span><span class="number">4</span><span class="special">];</span>
-<span class="special">};</span>
-
-<span class="keyword">void</span> <span class="identifier">use</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">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">size</span><span class="special">)</span>
-<span class="special">{</span>
- <span class="keyword">auto</span> <span class="identifier">p</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">alignment</span><span class="special">::</span><span class="identifier">align</span><span class="special">(</span><span class="number">16</span><span class="special">,</span> <span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">type</span><span class="special">),</span> <span class="identifier">ptr</span><span class="special">,</span> <span class="identifier">size</span><span class="special">);</span>
- <span class="keyword">if</span> <span class="special">(</span><span class="identifier">p</span><span class="special">)</span> <span class="special">{</span>
- <span class="keyword">auto</span> <span class="identifier">q</span> <span class="special">=</span> <span class="special">::</span><span class="keyword">new</span><span class="special">(</span><span class="identifier">p</span><span class="special">)</span> <span class="identifier">type</span><span class="special">;</span>
- <span class="identifier">q</span><span class="special">-&gt;~</span><span class="identifier">type</span><span class="special">();</span>
- <span class="special">}</span>
-<span class="special">}</span>
-
-<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
-<span class="special">{</span>
- <span class="keyword">char</span> <span class="identifier">c</span><span class="special">[</span><span class="number">64</span><span class="special">];</span>
- <span class="identifier">use</span><span class="special">(</span><span class="identifier">c</span><span class="special">,</span> <span class="keyword">sizeof</span> <span class="identifier">c</span><span class="special">);</span>
-<span class="special">}</span>
-</pre>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="align.tutorial.aligned_alloc"></a><a class="link" href="tutorial.html#align.tutorial.aligned_alloc" title="aligned_alloc and aligned_free">aligned_alloc and aligned_free</a>
-</h3></div></div></div>
-<p>
- Consider these functions alignment enabled versions of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">malloc</span></code>,
- <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">free</span></code> or <code class="computeroutput"><span class="special">::</span><span class="keyword">operator</span> <span class="keyword">new</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="keyword">const</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">no_throw_t</span><span class="special">&amp;)</span></code>, <code class="computeroutput"><span class="special">::</span><span class="keyword">operator</span> <span class="keyword">delete</span><span class="special">(</span><span class="keyword">void</span><span class="special">*)</span></code>.
- The aligned allocation function allocates space with the specified size and
- alignment. The aligned deallocation function can then deallocate this space.
- </p>
-<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
-
-<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
-<span class="special">{</span>
- <span class="keyword">void</span><span class="special">*</span> <span class="identifier">p</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">alignment</span><span class="special">::</span><span class="identifier">aligned_alloc</span><span class="special">(</span><span class="number">16</span><span class="special">,</span> <span class="number">100</span><span class="special">);</span>
- <span class="keyword">if</span> <span class="special">(</span><span class="identifier">p</span><span class="special">)</span> <span class="special">{</span>
- <span class="identifier">boost</span><span class="special">::</span><span class="identifier">alignment</span><span class="special">::</span><span class="identifier">aligned_free</span><span class="special">(</span><span class="identifier">p</span><span class="special">);</span>
- <span class="special">}</span>
-<span class="special">}</span>
-</pre>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="align.tutorial.aligned_allocator"></a><a class="link" href="tutorial.html#align.tutorial.aligned_allocator" title="aligned_allocator">aligned_allocator</a>
-</h3></div></div></div>
-<p>
- Consider this class template a superior version of the default allocator,
- <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span></code>, because it can be used with
- types that are over-aligned.
- </p>
-<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
-<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">vector</span><span class="special">&gt;</span>
-
-<span class="keyword">struct</span> <span class="keyword">alignas</span><span class="special">(</span><span class="number">16</span><span class="special">)</span> <span class="identifier">type</span> <span class="special">{</span>
- <span class="keyword">float</span> <span class="identifier">data</span><span class="special">[</span><span class="number">4</span><span class="special">];</span>
-<span class="special">};</span>
-
-<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
-<span class="special">{</span>
- <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="identifier">type</span><span class="special">,</span>
- <span class="identifier">boost</span><span class="special">::</span><span class="identifier">alignment</span><span class="special">::</span><span class="identifier">aligned_allocator</span><span class="special">&lt;</span><span class="identifier">type</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">v</span><span class="special">;</span>
- <span class="identifier">v</span><span class="special">.</span><span class="identifier">emplace_back</span><span class="special">();</span>
-<span class="special">}</span>
-</pre>
-<p>
- The optional template parameter of this class allows specifying a minimum
- alignment to use for allocations. The default minimum alignment is 1.
- </p>
-<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
-<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">vector</span><span class="special">&gt;</span>
-
-<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
-<span class="special">{</span>
- <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">alignment</span><span class="special">::</span>
- <span class="identifier">aligned_allocator</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="number">16</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">v</span><span class="special">;</span>
- <span class="identifier">v</span><span class="special">.</span><span class="identifier">emplace_back</span><span class="special">();</span>
-<span class="special">}</span>
-</pre>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="align.tutorial.aligned_allocator_adaptor"></a><a class="link" href="tutorial.html#align.tutorial.aligned_allocator_adaptor" title="aligned_allocator_adaptor">aligned_allocator_adaptor</a>
-</h3></div></div></div>
-<p>
- This class template can turn any existing allocator type, C++11 or C++03,
- stateful or stateless, into one that supports types which are over-aligned.
- </p>
-<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
-<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">vector</span><span class="special">&gt;</span>
-
-<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">Allocator</span><span class="special">&gt;</span>
-<span class="keyword">class</span> <span class="identifier">utility</span> <span class="special">{</span>
-<span class="keyword">public</span><span class="special">:</span>
- <span class="keyword">void</span> <span class="identifier">add</span><span class="special">()</span> <span class="special">{</span>
- <span class="identifier">v</span><span class="special">.</span><span class="identifier">emplace_back</span><span class="special">();</span>
- <span class="special">}</span>
-<span class="keyword">private</span><span class="special">:</span>
- <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">alignment</span><span class="special">::</span>
- <span class="identifier">aligned_allocator_adaptor</span><span class="special">&lt;</span><span class="identifier">Allocator</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">v</span><span class="special">;</span>
-<span class="special">};</span>
-
-<span class="keyword">struct</span> <span class="keyword">alignas</span><span class="special">(</span><span class="number">16</span><span class="special">)</span> <span class="identifier">type</span> <span class="special">{</span>
- <span class="keyword">float</span> <span class="identifier">data</span><span class="special">[</span><span class="number">4</span><span class="special">];</span>
-<span class="special">};</span>
-
-<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
-<span class="special">{</span>
- <span class="identifier">utility</span><span class="special">&lt;</span><span class="identifier">type</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special">&lt;</span><span class="identifier">type</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">u</span><span class="special">;</span>
- <span class="identifier">u</span><span class="special">.</span><span class="identifier">add</span><span class="special">();</span>
-<span class="special">}</span>
-</pre>
-<p>
- The optional template parameter of this class allows specifying a minimum
- alignment to use for allocations. The default minimum alignment is 1.
- </p>
-<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
-<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">vector</span><span class="special">&gt;</span>
-
-<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">Allocator</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">&gt;</span>
-<span class="keyword">class</span> <span class="identifier">utility</span> <span class="special">{</span>
-<span class="keyword">public</span><span class="special">:</span>
- <span class="keyword">void</span> <span class="identifier">add</span><span class="special">()</span> <span class="special">{</span>
- <span class="identifier">v</span><span class="special">.</span><span class="identifier">v</span><span class="special">.</span><span class="identifier">emplace_back</span><span class="special">();</span>
- <span class="special">}</span>
-<span class="keyword">private</span><span class="special">:</span>
- <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">alignment</span><span class="special">::</span>
- <span class="identifier">aligned_allocator_adaptor</span><span class="special">&lt;</span><span class="identifier">Allocator</span><span class="special">,</span> <span class="identifier">Alignment</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">v</span><span class="special">;</span>
-<span class="special">};</span>
-
-<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
-<span class="special">{</span>
- <span class="identifier">utility</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">&gt;,</span> <span class="number">16</span><span class="special">&gt;</span> <span class="identifier">u</span><span class="special">;</span>
- <span class="identifier">u</span><span class="special">.</span><span class="identifier">add</span><span class="special">();</span>
-<span class="special">}</span>
-</pre>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="align.tutorial.aligned_delete"></a><a class="link" href="tutorial.html#align.tutorial.aligned_delete" title="aligned_delete">aligned_delete</a>
-</h3></div></div></div>
-<p>
- Consider this class an alignment aware version of the class template <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">default_delete</span></code>.
- It is a deleter that destroys the object and then deallocates space using
- our aligned deallocation function. It should be used with constructed objects
- that were allocated with our aligned allocation function and is useful with
- deleter enabled types like <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">unique_ptr</span></code>.
- </p>
-<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
-<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">memory</span><span class="special">&gt;</span>
-
-<span class="keyword">struct</span> <span class="keyword">alignas</span><span class="special">(</span><span class="number">16</span><span class="special">)</span> <span class="identifier">type</span> <span class="special">{</span>
- <span class="keyword">float</span> <span class="identifier">data</span><span class="special">[</span><span class="number">4</span><span class="special">];</span>
-<span class="special">};</span>
-
-<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
-<span class="special">{</span>
- <span class="keyword">void</span><span class="special">*</span> <span class="identifier">p</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">alignment</span><span class="special">::</span><span class="identifier">aligned_alloc</span><span class="special">(</span><span class="number">16</span><span class="special">,</span> <span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">type</span><span class="special">));</span>
- <span class="keyword">if</span> <span class="special">(</span><span class="identifier">p</span><span class="special">)</span> <span class="special">{</span>
- <span class="identifier">type</span><span class="special">*</span> <span class="identifier">q</span> <span class="special">=</span> <span class="special">::</span><span class="keyword">new</span><span class="special">(</span><span class="identifier">p</span><span class="special">)</span> <span class="identifier">type</span><span class="special">;</span>
- <span class="identifier">std</span><span class="special">::</span><span class="identifier">unique_ptr</span><span class="special">&lt;</span><span class="identifier">type</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">alignment</span><span class="special">::</span><span class="identifier">aligned_delete</span><span class="special">&gt;(</span><span class="identifier">q</span><span class="special">);</span>
- <span class="special">}</span>
-<span class="special">}</span>
-</pre>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="align.tutorial.alignment_of"></a><a class="link" href="tutorial.html#align.tutorial.alignment_of" title="alignment_of">alignment_of</a>
-</h3></div></div></div>
-<p>
- This type trait can be used to query the alignment requirement of a type
- at compile time.
- </p>
-<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
-<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
-
-<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
-<span class="keyword">class</span> <span class="identifier">utility</span> <span class="special">{</span>
-<span class="keyword">public</span><span class="special">:</span>
- <span class="keyword">void</span> <span class="identifier">construct</span><span class="special">()</span> <span class="special">{</span>
- <span class="keyword">void</span><span class="special">*</span> <span class="identifier">p</span> <span class="special">=</span> <span class="special">&amp;</span><span class="identifier">v</span><span class="special">;</span>
- <span class="special">::</span><span class="keyword">new</span><span class="special">(</span><span class="identifier">p</span><span class="special">)</span> <span class="identifier">T</span><span class="special">();</span>
- <span class="special">}</span>
-<span class="keyword">private</span><span class="special">:</span>
- <span class="identifier">std</span><span class="special">::</span><span class="identifier">aligned_storage_t</span><span class="special">&lt;</span><span class="keyword">sizeof</span><span class="special">(</span><span class="identifier">T</span><span class="special">),</span>
- <span class="identifier">boost</span><span class="special">::</span><span class="identifier">alignment</span><span class="special">::</span><span class="identifier">alignment_of</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">value</span><span class="special">&gt;</span> <span class="identifier">v</span><span class="special">;</span>
-<span class="special">};</span>
-
-<span class="keyword">struct</span> <span class="keyword">alignas</span><span class="special">(</span><span class="number">16</span><span class="special">)</span> <span class="identifier">type</span> <span class="special">{</span>
- <span class="keyword">float</span> <span class="identifier">data</span><span class="special">[</span><span class="number">4</span><span class="special">];</span>
-<span class="special">};</span>
-
-<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
-<span class="special">{</span>
- <span class="identifier">utility</span><span class="special">&lt;</span><span class="identifier">type</span><span class="special">&gt;</span> <span class="identifier">u</span><span class="special">;</span>
- <span class="identifier">u</span><span class="special">.</span><span class="identifier">construct</span><span class="special">();</span>
-<span class="special">}</span>
-</pre>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="align.tutorial.assume_aligned"></a><a class="link" href="tutorial.html#align.tutorial.assume_aligned" title="assume_aligned">assume_aligned</a>
-</h3></div></div></div>
-<p>
- This macro is used to notify the compiler of a given pointer variable's alignment.
- It is useful for guide optimizing compilers into vectorizing or applying
- other compiler specific, alignment related optimizations.
- </p>
-<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
-
-<span class="keyword">void</span> <span class="identifier">use</span><span class="special">(</span><span class="keyword">double</span><span class="special">*</span> <span class="identifier">array</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">size</span><span class="special">)</span>
-<span class="special">{</span>
- <span class="identifier">BOOST_ALIGN_ASSUME_ALIGNED</span><span class="special">(</span><span class="identifier">array</span><span class="special">,</span> <span class="number">16</span><span class="special">);</span>
- <span class="keyword">for</span> <span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> <span class="identifier">i</span> <span class="special">&lt;</span> <span class="identifier">size</span><span class="special">;</span> <span class="identifier">i</span><span class="special">++)</span> <span class="special">{</span>
- <span class="identifier">array</span><span class="special">[</span><span class="identifier">i</span><span class="special">]++;</span>
- <span class="special">}</span>
-<span class="special">}</span>
-
-<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
-<span class="special">{</span>
- <span class="keyword">alignas</span><span class="special">(</span><span class="number">16</span><span class="special">)</span> <span class="keyword">double</span> <span class="identifier">d</span><span class="special">[</span><span class="number">4</span><span class="special">]</span> <span class="special">{</span> <span class="special">};</span>
- <span class="identifier">use</span><span class="special">(</span><span class="identifier">d</span><span class="special">,</span> <span class="number">4</span><span class="special">);</span>
-<span class="special">}</span>
-</pre>
-</div>
-<div class="section">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="align.tutorial.is_aligned"></a><a class="link" href="tutorial.html#align.tutorial.is_aligned" title="is_aligned">is_aligned</a>
-</h3></div></div></div>
-<p>
- This function is used to compare the alignment of a pointer. It is useful
- in assertions that validate a pointer value is aligned on a given boundary.
- </p>
-<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</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">&gt;</span>
-<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">cassert</span><span class="special">&gt;</span>
-
-<span class="keyword">void</span> <span class="identifier">use</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="special">{</span>
- <span class="identifier">assert</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">alignment</span><span class="special">::</span><span class="identifier">is_aligned</span><span class="special">(</span><span class="identifier">ptr</span><span class="special">,</span> <span class="number">16</span><span class="special">));</span>
-<span class="special">}</span>
-
-<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
-<span class="special">{</span>
- <span class="keyword">alignas</span><span class="special">(</span><span class="number">16</span><span class="special">)</span> <span class="keyword">char</span> <span class="identifier">c</span><span class="special">[</span><span class="number">64</span><span class="special">];</span>
- <span class="identifier">use</span><span class="special">(</span><span class="identifier">c</span><span class="special">);</span>
-<span class="special">}</span>
-</pre>
-</div>
-</div>
-<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
-<td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2014-2016 Glen Joseph Fernandes<p>
- Distributed under the Boost Software License, Version 1.0.
- </p>
-</div></td>
-</tr></table>
-<hr>
-<div class="spirit-nav">
-<a accesskey="p" href="rationale.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="examples.html"><img src="../../../doc/src/images/next.png" alt="Next"></a>
-</div>
-</body>
-</html>
diff --git a/doc/html/align/vocabulary.html b/doc/html/align/vocabulary.html
index f36e8ecf42..f7f9345fbf 100644
--- a/doc/html/align/vocabulary.html
+++ b/doc/html/align/vocabulary.html
@@ -32,63 +32,55 @@
<span class="phrase"><a name="align.vocabulary.basic_align"></a></span><a class="link" href="vocabulary.html#align.vocabulary.basic_align">[basic.align]</a>
</h4>
<p>
- Object types have <span class="bold"><strong>alignment requirements</strong></span> which
- place restrictions on the addresses at which an object of that type may be
- allocated. An <span class="bold"><strong>alignment</strong></span> is an implementation-defined
- integer value representing the number of bytes between successive addresses
- at which a given object can be allocated. An object type imposes an alignment
- requirement on every object of that type; stricter alignment can be requested
- using the alignment specifier.
+ Object types have <span class="emphasis"><em>alignment requirements</em></span> which place restrictions
+ on the addresses at which an object of that type may be allocated. An <span class="emphasis"><em>alignment</em></span>
+ is an implementation-defined integer value representing the number of bytes
+ between successive addresses at which a given object can be allocated. An object
+ type imposes an alignment requirement on every object of that type; stricter
+ alignment can be requested using the alignment specifier.
</p>
<p>
- A <span class="bold"><strong>fundamental alignment</strong></span> is represented by
- an alignment less than or equal to the greatest alignment supported by the
- implementation in all contexts, which is equal to <code class="computeroutput"><span class="keyword">alignof</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">max_align_t</span><span class="special">)</span></code>.
+ A <span class="emphasis"><em>fundamental alignment</em></span> is represented by an alignment
+ less than or equal to the greatest alignment supported by the implementation
+ in all contexts, which is equal to <code class="computeroutput"><span class="keyword">alignof</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">max_align_t</span><span class="special">)</span></code>.
The alignment required for a type might be different when it is used as the
- type of a complete object and when it is used as the type of a subobject.
+ type of a complete object and when it is used as the type of a subobject. [<span class="emphasis"><em>Example:</em></span>
</p>
-<div class="tip"><table border="0" summary="Tip">
-<tr>
-<td rowspan="2" align="center" valign="top" width="25"><img alt="[Tip]" src="../../../doc/src/images/tip.png"></td>
-<th align="left">Tip</th>
-</tr>
-<tr><td align="left" valign="top">
-<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">B</span> <span class="special">{</span> <span class="keyword">long</span> <span class="keyword">double</span> <span class="identifier">d</span><span class="special">;</span> <span class="special">};</span>
-<span class="keyword">struct</span> <span class="identifier">D</span> <span class="special">:</span> <span class="keyword">virtual</span> <span class="identifier">B</span> <span class="special">{</span> <span class="keyword">char</span> <span class="identifier">c</span><span class="special">;</span> <span class="special">};</span>
-</pre>
-<p>
- When <code class="computeroutput"><span class="identifier">D</span></code> is the type of a complete
- object, it will have a subobject of type <code class="computeroutput"><span class="identifier">B</span></code>,
- so it must be aligned appropriately for a <code class="computeroutput"><span class="keyword">long</span>
- <span class="keyword">double</span></code>. If <code class="computeroutput"><span class="identifier">D</span></code>
- appears as a subobject of another object that also has <code class="computeroutput"><span class="identifier">B</span></code>
- as a virtual base class, the <code class="computeroutput"><span class="identifier">B</span></code>
- subobject might be part of a different subobject, reducing the alignment
- requirements on the <code class="computeroutput"><span class="identifier">D</span></code> subobject.
- </p>
-</td></tr>
-</table></div>
+<div class="orderedlist"><ol class="orderedlist" type="1">
+<li class="listitem">
+ <code class="computeroutput"><span class="keyword">struct</span> <span class="identifier">B</span>
+ <span class="special">{</span> <span class="keyword">long</span>
+ <span class="keyword">double</span> <span class="identifier">d</span><span class="special">;</span> <span class="special">};</span></code>
+ </li>
+<li class="listitem">
+ <code class="computeroutput"><span class="keyword">struct</span> <span class="identifier">D</span>
+ <span class="special">:</span> <span class="keyword">virtual</span>
+ <span class="identifier">B</span> <span class="special">{</span>
+ <span class="keyword">char</span> <span class="identifier">c</span><span class="special">;</span> <span class="special">};</span></code>
+ </li>
+</ol></div>
<p>
- The result of the <code class="computeroutput"><span class="keyword">alignof</span></code> operator
- reflects the alignment requirement of the type in the complete-object case.
+ When <code class="computeroutput"><span class="identifier">D</span></code> is the type of a complete
+ object, it will have a subobject of type <code class="computeroutput"><span class="identifier">B</span></code>,
+ so it must be aligned appropriately for a <code class="computeroutput"><span class="keyword">long</span>
+ <span class="keyword">double</span></code>. If <code class="computeroutput"><span class="identifier">D</span></code>
+ appears as a subobject of another object that also has <code class="computeroutput"><span class="identifier">B</span></code>
+ as a virtual base class, the <code class="computeroutput"><span class="identifier">B</span></code>
+ subobject might be part of a different subobject, reducing the alignment requirements
+ on the <code class="computeroutput"><span class="identifier">D</span></code> subobject. &#8212;<span class="emphasis"><em>end
+ example</em></span>] The result of the <code class="computeroutput"><span class="keyword">alignof</span></code>
+ operator reflects the alignment requirement of the type in the complete-object
+ case.
</p>
<p>
- An <span class="bold"><strong>extended alignment</strong></span> is represented by an
- alignment greater than <code class="computeroutput"><span class="keyword">alignof</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">max_align_t</span><span class="special">)</span></code>.
- It is implementation-defined whether any extended alignments are supported
- and the contexts in which they are supported. A type having an extended alignment
- requirement is an <span class="bold"><strong>over-aligned type</strong></span>.
+ An <span class="emphasis"><em>extended alignment</em></span> is represented by an alignment greater
+ than <code class="computeroutput"><span class="keyword">alignof</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">max_align_t</span><span class="special">)</span></code>. It is implementation-defined whether any
+ extended alignments are supported and the contexts in which they are supported.
+ A type having an extended alignment requirement is an <span class="emphasis"><em>over-aligned
+ type</em></span>. [<span class="emphasis"><em>Note:</em></span> Every over-aligned type is or
+ contains a class type to which extended alignment applies (possibly through
+ a non-static data member). &#8212;<span class="emphasis"><em>end note</em></span>]
</p>
-<div class="note"><table border="0" summary="Note">
-<tr>
-<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../doc/src/images/note.png"></td>
-<th align="left">Note</th>
-</tr>
-<tr><td align="left" valign="top"><p>
- Every over-aligned type is or contains a class type to which extended alignment
- applies (possibly through a non-static data member).
- </p></td></tr>
-</table></div>
<p>
Alignments are represented as values of the type <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span></code>.
Valid alignments include only those values returned by an <code class="computeroutput"><span class="keyword">alignof</span></code>
@@ -97,28 +89,20 @@
integral power of two.
</p>
<p>
- Alignments have an order from <span class="bold"><strong>weaker</strong></span> to <span class="bold"><strong>stronger</strong></span> or <span class="bold"><strong>stricter</strong></span>
- alignments. Stricter alignments have larger alignment values. An address that
- satisfies an alignment requirement also satisfies any weaker valid alignment
- requirement.
+ Alignments have an order from <span class="emphasis"><em>weaker</em></span> to <span class="emphasis"><em>stronger</em></span>
+ or <span class="emphasis"><em>stricter</em></span> alignments. Stricter alignments have larger
+ alignment values. An address that satisfies an alignment requirement also satisfies
+ any weaker valid alignment requirement.
</p>
<p>
The alignment requirement of a complete type can be queried using an <code class="computeroutput"><span class="keyword">alignof</span></code> expression. Furthermore, the types
<code class="computeroutput"><span class="keyword">char</span></code>, <code class="computeroutput"><span class="keyword">signed</span>
<span class="keyword">char</span></code>, and <code class="computeroutput"><span class="keyword">unsigned</span>
<span class="keyword">char</span></code> shall have the weakest alignment
- requirement.
+ requirement. [<span class="emphasis"><em>Note:</em></span> This enables the character types to
+ be used as the underlying type for an aligned memory area. &#8212;<span class="emphasis"><em>end
+ note</em></span>]
</p>
-<div class="note"><table border="0" summary="Note">
-<tr>
-<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../doc/src/images/note.png"></td>
-<th align="left">Note</th>
-</tr>
-<tr><td align="left" valign="top"><p>
- This enables the character types to be used as the underlying type for an
- aligned memory area.
- </p></td></tr>
-</table></div>
<p>
Comparing alignments is meaningful and provides the obvious results:
</p>
@@ -133,17 +117,12 @@
When an alignment is larger than another it represents a stricter alignment.
</li>
</ul></div>
-<div class="note"><table border="0" summary="Note">
-<tr>
-<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../doc/src/images/note.png"></td>
-<th align="left">Note</th>
-</tr>
-<tr><td align="left" valign="top"><p>
- The runtime pointer alignment function can be used to obtain an aligned pointer
- within a buffer; the aligned-storage templates in the library can be used
- to obtain aligned storage.
- </p></td></tr>
-</table></div>
+<p>
+ [<span class="emphasis"><em>Note:</em></span> The runtime pointer alignment function can be used
+ to obtain an aligned pointer within a buffer; the aligned-storage templates
+ in the library can be used to obtain aligned storage. &#8212;<span class="emphasis"><em>end
+ note</em></span>]
+ </p>
<p>
If a request for a specific extended alignment in a specific context is not
supported by an implementation, the program is ill-formed. Additionally, a
@@ -153,7 +132,8 @@
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
-<td align="right"><div class="copyright-footer">Copyright &#169; 2014-2016 Glen Joseph Fernandes<p>
+<td align="right"><div class="copyright-footer">Copyright &#169; 2014-2017 Glen
+ Joseph Fernandes<p>
Distributed under the Boost Software License, Version 1.0.
</p>
</div></td>