Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r65754 - in sandbox/opaque/libs/opaque/doc: . html
From: vicente.botet_at_[hidden]
Date: 2010-10-04 16:37:59


Author: viboes
Date: 2010-10-04 16:37:53 EDT (Mon, 04 Oct 2010)
New Revision: 65754
URL: http://svn.boost.org/trac/boost/changeset/65754

Log:
Opaque:
* Add more documentation

Text files modified:
   sandbox/opaque/libs/opaque/doc/html/index.html | 4195 ++++++++++++++++++++++++++++++++-------
   sandbox/opaque/libs/opaque/doc/opaque.qbk | 491 +++-
   2 files changed, 3818 insertions(+), 868 deletions(-)

Modified: sandbox/opaque/libs/opaque/doc/html/index.html
==============================================================================
--- sandbox/opaque/libs/opaque/doc/html/index.html (original)
+++ sandbox/opaque/libs/opaque/doc/html/index.html 2010-10-04 16:37:53 EDT (Mon, 04 Oct 2010)
@@ -27,7 +27,7 @@
 </h3></div></div></div>
 <div><p class="copyright">Copyright &#169; 2010 Vicente J. Botet Escriba</p></div>
 <div><div class="legalnotice">
-<a name="id4987066"></a><p>
+<a name="id4946181"></a><p>
         Distributed under the Boost Software License, Version 1.0. (See accompanying
         file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
       </p>
@@ -109,7 +109,7 @@
 <dt><span class="section">Description</span></dt>
 </dl></div>
 <a name="boost.opaque.overview.how_to_use_this_documentation"></a><h3>
-<a name="id4948562"></a>
+<a name="id4948613"></a>
       <a href="index.html#boost.opaque.overview.how_to_use_this_documentation">How to
       Use This Documentation</a>
     </h3>
@@ -283,7 +283,7 @@
         Installing Boost.Opaque</a>
 </h4></div></div></div>
 <a name="boost.opaque.users_guide.getting_started.install.getting_boost_opaque"></a><h5>
-<a name="id4949134"></a>
+<a name="id4987337"></a>
           <a href="index.html#boost.opaque.users_guide.getting_started.install.getting_boost_opaque">Getting
           Boost.Opaque</a>
         </h5>
@@ -297,7 +297,7 @@
           Sandbox</a>.
         </p>
 <a name="boost.opaque.users_guide.getting_started.install.building_boost_opaque"></a><h5>
-<a name="id4949194"></a>
+<a name="id4987398"></a>
           <a href="index.html#boost.opaque.users_guide.getting_started.install.building_boost_opaque">Building
           Boost.Opaque</a>
         </h5>
@@ -307,7 +307,7 @@
           in your compiler include path.
         </p>
 <a name="boost.opaque.users_guide.getting_started.install.requirements"></a><h5>
-<a name="id4949227"></a>
+<a name="id4987430"></a>
           <a href="index.html#boost.opaque.users_guide.getting_started.install.requirements">Requirements</a>
         </h5>
 <p>
@@ -315,7 +315,7 @@
           (and all libraries it depends on).
         </p>
 <a name="boost.opaque.users_guide.getting_started.install.exceptions_safety"></a><h5>
-<a name="id4949258"></a>
+<a name="id4987461"></a>
           <a href="index.html#boost.opaque.users_guide.getting_started.install.exceptions_safety">Exceptions
           safety</a>
         </h5>
@@ -324,7 +324,7 @@
           of exception safety as long as the underlying parameters provide it.
         </p>
 <a name="boost.opaque.users_guide.getting_started.install.thread_safety"></a><h5>
-<a name="id4949284"></a>
+<a name="id4987488"></a>
           <a href="index.html#boost.opaque.users_guide.getting_started.install.thread_safety">Thread
           safety</a>
         </h5>
@@ -332,7 +332,7 @@
           All functions in the library are thread-unsafe except when noted explicitly.
         </p>
 <a name="boost.opaque.users_guide.getting_started.install.tested_compilers"></a><h5>
-<a name="id4949310"></a>
+<a name="id4987513"></a>
           <a href="index.html#boost.opaque.users_guide.getting_started.install.tested_compilers">Tested
           compilers</a>
         </h5>
@@ -428,10 +428,10 @@
           stored on a sorted container.
         </p>
 <pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">Identifier_tag</span><span class="special">;</span>
-<span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">opaque</span><span class="special">::</span><span class="identifier">new_type</span><span class="special">&lt;</span> <span class="keyword">int</span><span class="special">,</span> <span class="identifier">Identifier_tag</span><span class="special">,</span>
+<span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">opaque</span><span class="special">::</span><span class="identifier">new_type</span><span class="special">&lt;</span> <span class="keyword">int</span><span class="special">,</span> <span class="identifier">Identifier_tag</span><span class="special">,</span>
     <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span>
         <span class="identifier">opaque</span><span class="special">::</span><span class="identifier">using_totally_ordered1</span>
- <span class="special">&gt;</span>
+ <span class="special">&gt;</span>
 <span class="special">&gt;</span> <span class="identifier">Identifier</span><span class="special">;</span>
 </pre>
 <p>
@@ -487,10 +487,10 @@
           user needs to add yet some specific methods, this tag is no more necessary
           as we need to define already a new class.
         </p>
-<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">Identifier</span> <span class="special">:</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">opaque</span><span class="special">::</span><span class="identifier">new_class</span><span class="special">&lt;</span><span class="identifier">Identifier</span><span class="special">,</span> <span class="keyword">int</span><span class="special">,</span>
+<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">Identifier</span> <span class="special">:</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">opaque</span><span class="special">::</span><span class="identifier">new_class</span><span class="special">&lt;</span><span class="identifier">Identifier</span><span class="special">,</span> <span class="keyword">int</span><span class="special">,</span>
     <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span>
         <span class="identifier">opaque</span><span class="special">::</span><span class="identifier">using_totally_ordered1</span>
- <span class="special">&gt;</span>
+ <span class="special">&gt;</span>
 <span class="special">{</span>
     <span class="keyword">void</span> <span class="identifier">print</span><span class="special">();</span>
     <span class="comment">// ...
@@ -543,7 +543,7 @@
 <span class="identifier">Bool</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">Int</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">Int</span> <span class="identifier">b</span><span class="special">)</span>
 <span class="special">{</span>
     <span class="keyword">if</span><span class="special">(</span><span class="identifier">cnd</span><span class="special">())</span> <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> <span class="comment">// 1
-</span> <span class="keyword">else</span> <span class="keyword">return</span> <span class="identifier">a</span> <span class="special">&gt;</span> <span class="identifier">b</span><span class="special">;</span>
+</span> <span class="keyword">else</span> <span class="keyword">return</span> <span class="identifier">a</span> <span class="special">&gt;</span> <span class="identifier">b</span><span class="special">;</span>
 <span class="special">}</span>
 </pre>
 <p>
@@ -556,8 +556,8 @@
 
 <span class="identifier">Bool</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">Int</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">Int</span> <span class="identifier">b</span><span class="special">)</span>
 <span class="special">{</span>
- <span class="keyword">if</span><span class="special">(</span><span class="identifier">cnd</span><span class="special">())</span> <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> <span class="comment">// (1) Error
-</span> <span class="keyword">else</span> <span class="keyword">return</span> <span class="identifier">a</span> <span class="special">&gt;</span> <span class="identifier">b</span><span class="special">;</span> <span class="comment">// (2) Error
+ <span class="keyword">if</span><span class="special">(</span><span class="identifier">cnd</span><span class="special">())</span> <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> <span class="comment">// (1) Error
+</span> <span class="keyword">else</span> <span class="keyword">return</span> <span class="identifier">a</span> <span class="special">&gt;</span> <span class="identifier">b</span><span class="special">;</span> <span class="comment">// (2) Error
 </span><span class="special">}</span>
 </pre>
 <p>
@@ -568,7 +568,7 @@
 <pre class="programlisting"><span class="identifier">Bool</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">Int</span> <span class="identifier">a</span><span class="special">,</span> <span class="identifier">Int</span> <span class="identifier">b</span><span class="special">)</span>
 <span class="special">{</span>
     <span class="keyword">if</span><span class="special">(</span><span class="identifier">cnd</span><span class="special">())</span> <span class="keyword">return</span> <span class="identifier">opaque</span><span class="special">::</span><span class="identifier">false_</span><span class="special">;</span> <span class="comment">// OK
-</span> <span class="keyword">else</span> <span class="keyword">return</span> <span class="identifier">a</span> <span class="special">&gt;</span> <span class="identifier">b</span><span class="special">;</span> <span class="comment">// (2) Error
+</span> <span class="keyword">else</span> <span class="keyword">return</span> <span class="identifier">a</span> <span class="special">&gt;</span> <span class="identifier">b</span><span class="special">;</span> <span class="comment">// (2) Error
 </span><span class="special">}</span>
 </pre>
 <p>
@@ -586,7 +586,7 @@
         </p>
 <pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">Int_tag</span><span class="special">;</span>
 <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">opaque</span><span class="special">::</span><span class="identifier">new_type</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">Int_tag</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span>
- <span class="identifier">opaque</span><span class="special">::</span><span class="identifier">using_integer_like</span><span class="special">&lt;</span><span class="identifier">opaque</span><span class="special">::</span><span class="identifier">boolean</span><span class="special">&gt;</span>
+ <span class="identifier">opaque</span><span class="special">::</span><span class="identifier">using_integer_like</span><span class="special">&lt;</span><span class="identifier">opaque</span><span class="special">::</span><span class="identifier">boolean</span><span class="special">&gt;</span>
 <span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">Int</span><span class="special">;</span>
 </pre>
 <p>
@@ -643,11 +643,26 @@
           already do that for all the built-in types.
         </p>
 </div>
-<div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title">
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
 <a name="boost.opaque.users_guide.tutorial.explicit_versus_implicit_conversions_to_the_ut"></a><a href="index.html#boost.opaque.users_guide.tutorial.explicit_versus_implicit_conversions_to_the_ut" title="Explicit
         versus Implicit Conversions to the UT">Explicit
         versus Implicit Conversions to the UT</a>
-</h4></div></div></div></div>
+</h4></div></div></div>
+<p>
+ Opaque typedef are explicitly convertible to the underlying type. But are
+ they implicitly convertible? It depends. So the library provide two kind
+ of opaque typedef :
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ public opaque typedef: implicit conversion to the underlying type
+ </li>
+<li>
+ public opaque typedef: explict conversion to the underlying type
+ </li>
+</ul></div>
+</div>
 <div class="section" lang="en">
 <div class="titlepage"><div><div><h4 class="title">
 <a name="boost.opaque.users_guide.tutorial.hiding_inherited_operations"></a><a href="index.html#boost.opaque.users_guide.tutorial.hiding_inherited_operations" title="Hiding
@@ -675,25 +690,65 @@
 <span class="special">))</span>
 </pre>
 </div>
-<div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title">
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
 <a name="boost.opaque.users_guide.tutorial.underlying_types_hierarchy"></a><a href="index.html#boost.opaque.users_guide.tutorial.underlying_types_hierarchy" title="Underlying
         types hierarchy">Underlying
         types hierarchy</a>
-</h4></div></div></div></div>
-<div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title">
+</h4></div></div></div>
+<p>
+ Opaque and underlying types form a hierarchy with a implicit or explicit
+ conversion from the OT to the UT. This convertibility is a relation. It
+ seems natural that this relation satisfy the transitivity property.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
 <a name="boost.opaque.users_guide.tutorial.using_udt_as_underlying_types"></a><a href="index.html#boost.opaque.users_guide.tutorial.using_udt_as_underlying_types" title="Using
         UDT as Underlying types">Using
         UDT as Underlying types</a>
-</h4></div></div></div></div>
+</h4></div></div></div>
+<p>
+ Talk about the problem with direct data access that can not be wrapped
+ by the underlying type.
+ </p>
+<p>
+ For example we can access the fisrt field of the UT pair, but the OT can
+ not give this access. Instead the OT could define some function accessors
+ that inderectly will almost behave as the data member.
+ </p>
+</div>
 </div>
 <div class="section" lang="en">
 <div class="titlepage"><div><div><h3 class="title">
 <a name="boost.opaque.users_guide.examples"></a>Examples
 </h3></div></div></div>
 <div class="toc"><dl><dt><span class="section">Identifier</span></dt></dl></div>
-<div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title">
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
 <a name="boost.opaque.users_guide.examples.identifier"></a>Identifier
-</h4></div></div></div></div>
+</h4></div></div></div>
+<p>
+ One of the use cases that were at the origin of this library was to be
+ able to define different identifiers that can be stored on a ordered container.
+ </p>
+<p>
+ The following template IdentifierGenarator can be used for this propose
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">UT</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Tag</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">IdentifierGenarator</span>
+<span class="special">{</span>
+ <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">opaque</span><span class="special">::</span><span class="identifier">new_type</span><span class="special">&lt;</span><span class="identifier">UT</span><span class="special">,</span> <span class="identifier">Tag</span><span class="special">,</span>
+ <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">opaque</span><span class="special">::</span><span class="keyword">using</span><span class="special">::</span><span class="identifier">less_than_comparable</span><span class="special">&gt;</span> <span class="identifier">type</span><span class="special">;</span>
+<span class="special">};</span>
+</pre>
+<p>
+ The class can be used as follows
+ </p>
+<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">ConnectionIdentifierTag</span> <span class="special">{};</span>
+<span class="keyword">typedef</span> <span class="identifier">IdentifierGenarator</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">ConnectionIdentifierTag</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">ConnectionIdentifier</span><span class="special">;</span>
+</pre>
+</div>
 </div>
 <div class="section" lang="en">
 <div class="titlepage"><div><div><h3 class="title">
@@ -784,21 +839,21 @@
 <dd><dl>
 <dt><span class="section"> Concepts</span></dt>
 <dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.linear_hierarchy_hpp">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">metamixin</span><span class="special">/</span><span class="identifier">linear_hierarchy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
-<dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.inherited_from_undelying_hpp">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">metamixin</span><span class="special">/</span><span class="identifier">inherited_from_undelying</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">meta_mixin</span><span class="special">/</span><span class="identifier">linear_hierarchy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.inherited_from_underlying_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">meta_mixin</span><span class="special">/</span><span class="identifier">inherited_from_underlying</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
 <dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.using_operators_hpp">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">metamixin</span><span class="special">/</span><span class="identifier">using_operators</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">meta_mixin</span><span class="special">/</span><span class="identifier">using_operators</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
 <dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.hiding_operators_hpp">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">metamixin</span><span class="special">/</span><span class="identifier">hiding_operators</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">meta_mixin</span><span class="special">/</span><span class="identifier">hiding_operators</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
 <dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.using_combined_operators_hpp">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">metamixin</span><span class="special">/</span><span class="identifier">using_combined_operators</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">meta_mixin</span><span class="special">/</span><span class="identifier">using_combined_operators</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
 <dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.hiding_combined_operators_hpp">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">metamixin</span><span class="special">/</span><span class="identifier">hiding_combined_operators</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">meta_mixin</span><span class="special">/</span><span class="identifier">hiding_combined_operators</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
 <dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.transitive_substituable_hpp">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">metamixin</span><span class="special">/</span><span class="identifier">transitive_substituable</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">meta_mixin</span><span class="special">/</span><span class="identifier">transitive_substituable</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
 <dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.transitive_explicit_substituable_hpp">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">metamixin</span><span class="special">/</span><span class="identifier">transitive_explicit_substituable</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">meta_mixin</span><span class="special">/</span><span class="identifier">transitive_explicit_substituable</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
 </dl></dd>
 </dl></div>
 <div class="section" lang="en">
@@ -859,22 +914,48 @@
         Template new_class&lt;&gt;"> Class
         Template <code class="computeroutput"><span class="identifier">new_class</span><span class="special">&lt;&gt;</span></code></a>
 </h4></div></div></div>
+<p>
+ <code class="computeroutput"><span class="identifier">new_class</span><span class="special">&lt;&gt;</span></code>
+ wraps an underlying type providing the regular constructors and copy construction
+ from the underlying type and all the convertibles to the the UT.
+ </p>
+<p>
+ Resuming:
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ Can instances of UT be explicitly converted to instances of OT? Yes
+ </li>
+<li>
+ Can instances of convertible to UT be explicitly converted to instances
+ of OT? Yes
+ </li>
+<li>
+ Can instances of UT be implicitly converted to instances of OT? No
+ </li>
+<li>
+ Can instances of OT be explicitly converted to instances of UT? No
+ </li>
+<li>
+ Can instances of OT be implicitly converted to instances of UT? No
+ </li>
+</ul></div>
 <pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span>
     <span class="keyword">typename</span> <span class="identifier">Final</span><span class="special">,</span>
- <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span>
- <span class="keyword">typename</span> <span class="identifier">MetaMixinSeq</span><span class="special">=</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">vector0</span><span class="special">&lt;&gt;,</span>
- <span class="keyword">typename</span> <span class="identifier">Base</span><span class="special">=</span><span class="identifier">base_new_type</span>
+ <span class="keyword">typename</span> <span class="identifier">UT</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">MetaMixinSeq</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">Base</span>
 <span class="special">&gt;</span>
 <span class="keyword">class</span> <span class="identifier">new_class</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">linear_hierarchy</span><span class="special">&lt;</span><span class="identifier">MetaMixinSeq</span><span class="special">,</span> <span class="identifier">Final</span><span class="special">,</span> <span class="identifier">Base</span><span class="special">&gt;::</span><span class="identifier">type</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">underlying_type</span><span class="special">;</span>
+ <span class="keyword">typedef</span> <span class="identifier">UT</span> <span class="identifier">underlying_type</span><span class="special">;</span>
 
     <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">W</span><span class="special">&gt;</span>
     <span class="keyword">explicit</span> <span class="identifier">new_class</span><span class="special">(</span><span class="identifier">W</span> <span class="identifier">v</span><span class="special">);</span>
     <span class="identifier">new_class</span><span class="special">();</span>
     <span class="identifier">new_class</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">new_class</span> <span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">);</span>
- <span class="keyword">explicit</span> <span class="identifier">new_class</span><span class="special">(</span><span class="identifier">T</span> <span class="identifier">v</span><span class="special">);</span>
+ <span class="keyword">explicit</span> <span class="identifier">new_class</span><span class="special">(</span><span class="identifier">underlying_type</span> <span class="identifier">v</span><span class="special">);</span>
 <span class="keyword">protected</span><span class="special">:</span>
     <span class="identifier">T</span> <span class="identifier">val_</span><span class="special">;</span>
     <span class="identifier">new_class</span> <span class="special">&amp;</span> <span class="keyword">operator</span><span class="special">=(</span><span class="keyword">const</span> <span class="identifier">new_class</span> <span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">);</span>
@@ -896,6 +977,27 @@
 
 <span class="special">};</span>
 </pre>
+<p>
+ <span class="bold"><strong>Requirements</strong></span>
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ <code class="computeroutput"><span class="identifier">UT</span></code> must be a model
+ of a CopyCOnstructible and Assignable.
+ </li>
+<li>
+ <code class="computeroutput"><span class="identifier">Final</span></code> must be a model
+ of FinalUnderlying.
+ </li>
+<li>
+ <code class="computeroutput"><span class="identifier">MetaMixinSeq</span></code> must be
+ a model of FinalUnderlying: defaulted to the empty sequence.
+ </li>
+<li>
+ <code class="computeroutput"><span class="identifier">Base</span></code> is defaulted to
+ the base class of all the new types <code class="computeroutput"><span class="identifier">base_new_type</span></code>.
+ </li>
+</ul></div>
 </div>
 <div class="section" lang="en">
 <div class="titlepage"><div><div><h4 class="title">
@@ -912,6 +1014,23 @@
 <span class="special">&gt;</span>
 <span class="identifier">T</span> <span class="identifier">opaque_static_cast</span><span class="special">(</span><span class="identifier">new_class</span><span class="special">&lt;</span><span class="identifier">Final</span><span class="special">,</span> <span class="identifier">UT</span><span class="special">,</span> <span class="identifier">MetaMixinSeq</span><span class="special">,</span> <span class="identifier">Base</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">v</span><span class="special">);</span>
 </pre>
+<p>
+ <span class="bold"><strong>Requirements</strong></span>
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ <code class="computeroutput"><span class="identifier">T</span></code> and <code class="computeroutput"><span class="identifier">UT</span></code> must be a model of a CopyCOnstructible
+ and Assignable.
+ </li>
+<li>
+ <code class="computeroutput"><span class="identifier">Final</span></code> must be a model
+ of FinalUnderlying.
+ </li>
+<li>
+ <code class="computeroutput"><span class="identifier">MetaMixinSeq</span></code> must be
+ a model of FinalUnderlying.
+ </li>
+</ul></div>
 </div>
 </div>
 <div class="section" lang="en">
@@ -926,9 +1045,9 @@
 </dl></div>
 <pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
     <span class="keyword">template</span> <span class="special">&lt;</span>
- <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">UT</span><span class="special">,</span>
         <span class="keyword">typename</span> <span class="identifier">Tag</span><span class="special">,</span>
- <span class="keyword">typename</span> <span class="identifier">Concepts</span><span class="special">=</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">vector0</span><span class="special">&lt;&gt;,</span>
+ <span class="keyword">typename</span> <span class="identifier">MetaMixinSeq</span><span class="special">=</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">vector0</span><span class="special">&lt;&gt;,</span>
         <span class="keyword">typename</span> <span class="identifier">Base</span><span class="special">=</span><span class="identifier">base_new_type</span><span class="special">&gt;</span>
     <span class="keyword">class</span> <span class="identifier">new_type</span><span class="special">;</span>
 </pre>
@@ -938,22 +1057,47 @@
         Template new_type&lt;&gt;"> Class
         Template <code class="computeroutput"><span class="identifier">new_type</span><span class="special">&lt;&gt;</span></code></a>
 </h4></div></div></div>
+<p>
+ <code class="computeroutput"><span class="identifier">new_type</span><span class="special">&lt;&gt;</span></code>
+ provides the equivalent of <code class="computeroutput"><span class="identifier">new_class</span><span class="special">&lt;&gt;</span></code> but can be used as a typedef.
+ </p>
 <pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span>
- <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">UT</span><span class="special">,</span>
     <span class="keyword">typename</span> <span class="identifier">Tag</span><span class="special">,</span>
- <span class="keyword">typename</span> <span class="identifier">Concepts</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">MetaMixinSeq</span><span class="special">,</span>
     <span class="keyword">typename</span> <span class="identifier">Base</span>
 <span class="keyword">class</span> <span class="identifier">new_type</span>
- <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">new_class</span><span class="special">&lt;</span><span class="identifier">new_type</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">Tag</span><span class="special">,</span> <span class="identifier">Concepts</span><span class="special">,</span> <span class="identifier">Base</span><span class="special">&gt;,</span> <span class="identifier">T</span><span class="special">,</span> <span class="identifier">Concepts</span><span class="special">,</span> <span class="identifier">Base</span><span class="special">&gt;</span>
+ <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">new_class</span><span class="special">&lt;</span><span class="identifier">new_type</span><span class="special">&lt;</span><span class="identifier">UT</span><span class="special">,</span> <span class="identifier">Tag</span><span class="special">,</span> <span class="identifier">MetaMixinSeq</span><span class="special">,</span> <span class="identifier">Base</span><span class="special">&gt;,</span> <span class="identifier">UT</span><span class="special">,</span> <span class="identifier">MetaMixinSeq</span><span class="special">,</span> <span class="identifier">Base</span><span class="special">&gt;</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">typename</span> <span class="identifier">W</span><span class="special">&gt;</span>
     <span class="keyword">explicit</span> <span class="identifier">new_type</span><span class="special">(</span><span class="identifier">W</span> <span class="identifier">v</span><span class="special">);</span>
     <span class="identifier">new_type</span><span class="special">();</span>
     <span class="identifier">new_type</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">new_type</span> <span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">);</span>
- <span class="keyword">explicit</span> <span class="identifier">new_type</span><span class="special">(</span><span class="identifier">T</span> <span class="identifier">v</span><span class="special">);</span>
+ <span class="keyword">explicit</span> <span class="identifier">new_type</span><span class="special">(</span><span class="identifier">UT</span> <span class="identifier">v</span><span class="special">);</span>
 <span class="special">};</span>
 </pre>
+<p>
+ <span class="bold"><strong>Requirements</strong></span>
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ <code class="computeroutput"><span class="identifier">UT</span></code> must be a model
+ of a CopyCOnstructible and Assignable.
+ </li>
+<li>
+ <code class="computeroutput"><span class="identifier">Tag</span></code> must be a unique
+ class.
+ </li>
+<li>
+ <code class="computeroutput"><span class="identifier">MetaMixinSeq</span></code> must be
+ a model of FinalUnderlying: defaulted to the empty sequence.
+ </li>
+<li>
+ <code class="computeroutput"><span class="identifier">Base</span></code> is defaulted to
+ the base class of all the new types <code class="computeroutput"><span class="identifier">base_new_type</span></code>.
+ </li>
+</ul></div>
 </div>
 <div class="section" lang="en">
 <div class="titlepage"><div><div><h4 class="title">
@@ -965,10 +1109,10 @@
     <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span>
     <span class="keyword">typename</span> <span class="identifier">UT</span><span class="special">,</span>
     <span class="keyword">typename</span> <span class="identifier">Tag</span><span class="special">,</span>
- <span class="keyword">typename</span> <span class="identifier">Concepts</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">MetaMixinSeq</span><span class="special">,</span>
     <span class="keyword">typename</span> <span class="identifier">Base</span>
 <span class="special">&gt;</span>
-<span class="identifier">T</span> <span class="identifier">opaque_static_cast</span><span class="special">(</span><span class="identifier">new_type</span><span class="special">&lt;</span><span class="identifier">UT</span><span class="special">,</span><span class="identifier">Tag</span><span class="special">,</span><span class="identifier">Concepts</span><span class="special">,</span><span class="identifier">Base</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">v</span><span class="special">);</span>
+<span class="identifier">T</span> <span class="identifier">opaque_static_cast</span><span class="special">(</span><span class="identifier">new_type</span><span class="special">&lt;</span><span class="identifier">UT</span><span class="special">,</span><span class="identifier">Tag</span><span class="special">,</span><span class="identifier">MetaMixinSeq</span><span class="special">,</span><span class="identifier">Base</span><span class="special">&gt;</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">v</span><span class="special">);</span>
 </pre>
 </div>
 </div>
@@ -1020,37 +1164,22 @@
     <span class="keyword">class</span> <span class="identifier">base_private_opaque_type</span><span class="special">;</span>
     <span class="keyword">template</span> <span class="special">&lt;</span>
         <span class="keyword">typename</span> <span class="identifier">Final</span><span class="special">,</span>
- <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">UT</span><span class="special">,</span>
         <span class="keyword">typename</span> <span class="identifier">MetaMixinSeq</span><span class="special">=</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">vector0</span><span class="special">&lt;&gt;,</span>
         <span class="keyword">typename</span> <span class="identifier">Base</span><span class="special">=</span><span class="identifier">base_private_opaque_type</span>
     <span class="special">&gt;</span>
     <span class="keyword">class</span> <span class="identifier">private_opaque_class</span><span class="special">;</span>
 <span class="special">}</span>
 </pre>
-<div class="itemizedlist"><ul type="disc">
-<li>
- Can instances of UT be explicitly converted to instances of OT? Yes
- </li>
-<li>
- Can instances of UT be implicitly converted to instances of OT? No
- </li>
-<li>
- Can instances of OT be explicitly converted to instances of UT? Yes.
- </li>
-<li>
- Waiting for explicit conversion operators,, the explicit conversion must
- be done through the underlying function
- </li>
-<li>
- Can instances of OT be implicitly converted to instances of UT? No
- </li>
-</ul></div>
 <div class="section" lang="en">
 <div class="titlepage"><div><div><h4 class="title">
 <a name="boost.opaque.reference.private_opaque_class_hpp.base_private_opaque_type"></a><a href="index.html#boost.opaque.reference.private_opaque_class_hpp.base_private_opaque_type" title="
         Class base_private_opaque_type">
         Class <code class="computeroutput"><span class="identifier">base_private_opaque_type</span></code></a>
 </h4></div></div></div>
+<p>
+ This is the base class of all the private opaque types.
+ </p>
 <pre class="programlisting"><span class="keyword">class</span> <span class="identifier">base_private_opaque_type</span> <span class="special">{};</span>
 </pre>
 </div>
@@ -1060,18 +1189,66 @@
         Class Template private_opaque_class&lt;&gt;">
         Class Template <code class="computeroutput"><span class="identifier">private_opaque_class</span><span class="special">&lt;&gt;</span></code></a>
 </h4></div></div></div>
+<p>
+ Resuming:
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ Can instances of UT be explicitly converted to instances of OT? Yes
+ </li>
+<li>
+ Can instances of convertibles to UT be explicitly converted to instances
+ of OT? Yes
+ </li>
+<li>
+ Can instances of UT be implicitly converted to instances of OT? No
+ </li>
+<li>
+ Can instances of OT be explicitly converted to instances of UT? Yes.
+ </li>
+<li>
+ Can instances of OT be explicitly converted to instances of convertible
+ to UT? Yes
+ </li>
+<li>
+ Can instances of OT be implicitly converted to instances of UT? No
+ </li>
+<li>
+ Can instances of OT be implicitly converted to instances of convertible
+ to UT? No
+ </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>
+ Waiting for explicit conversion operators, the explicit conversion must
+ be done through the underlying function
+ </p></td></tr>
+</table></div>
+<p>
+ <code class="computeroutput"><span class="identifier">private_opaque_class</span><span class="special">&lt;&gt;</span></code>
+ is a <code class="computeroutput"><span class="identifier">new_class</span></code> with the
+ <code class="computeroutput"><span class="identifier">transitive_explicit_substituable</span><span class="special">&lt;</span><span class="identifier">base_private_opaque_type</span><span class="special">&gt;</span></code> and <code class="computeroutput"><span class="identifier">inherited_from_underlying</span><span class="special">&lt;</span><span class="identifier">UT</span><span class="special">&gt;</span></code> added to the sequence of meta-mixins
+ MetaMixinSeq, so a <code class="computeroutput"><span class="identifier">private_opaque_class</span></code>
+ inherits from all the operations of tye underlying type and adds transitive
+ explicit conversions to all the substituables. The nested typedef <code class="computeroutput"><span class="identifier">substituables</span></code> is the MPL sequence of
+ all the UT in the opaque type hierarchy.
+ </p>
 <pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span>
     <span class="keyword">typename</span> <span class="identifier">Final</span><span class="special">,</span>
- <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">UT</span><span class="special">,</span>
     <span class="keyword">typename</span> <span class="identifier">MetaMixinSeq</span><span class="special">,</span>
     <span class="keyword">typename</span> <span class="identifier">Base</span>
 <span class="special">&gt;</span>
 <span class="keyword">class</span> <span class="identifier">private_opaque_class</span> <span class="special">:</span> <span class="keyword">public</span>
- <span class="identifier">new_class</span><span class="special">&lt;</span> <span class="identifier">Final</span><span class="special">,</span> <span class="identifier">T</span><span class="special">,</span>
+ <span class="identifier">new_class</span><span class="special">&lt;</span> <span class="identifier">Final</span><span class="special">,</span> <span class="identifier">UT</span><span class="special">,</span>
             <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">push</span><span class="special">&lt;</span>
                 <span class="identifier">transitive_explicit_substituable</span><span class="special">&lt;</span><span class="identifier">base_private_opaque_type</span><span class="special">&gt;,</span>
                 <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">push</span><span class="special">&lt;</span>
- <span class="identifier">inherited_from_undelying</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;,</span>
+ <span class="identifier">inherited_from_underlying</span><span class="special">&lt;</span><span class="identifier">UT</span><span class="special">&gt;,</span>
                     <span class="identifier">MetaMixinSeq</span>
                 <span class="special">&gt;</span>
             <span class="special">&gt;,</span>
@@ -1083,7 +1260,7 @@
     <span class="identifier">private_opaque_class</span><span class="special">();</span>
     <span class="identifier">private_opaque_class</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">private_opaque_class</span> <span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">);</span>
     <span class="identifier">private_opaque_class</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Final</span> <span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">);</span>
- <span class="keyword">explicit</span> <span class="identifier">private_opaque_class</span><span class="special">(</span><span class="identifier">T</span> <span class="identifier">v</span><span class="special">);</span>
+ <span class="keyword">explicit</span> <span class="identifier">private_opaque_class</span><span class="special">(</span><span class="identifier">UT</span> <span class="identifier">v</span><span class="special">);</span>
     <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">W</span><span class="special">&gt;</span>
     <span class="keyword">explicit</span> <span class="identifier">private_opaque_class</span><span class="special">(</span><span class="identifier">W</span> <span class="identifier">v</span><span class="special">);</span>
 <span class="special">};</span>
@@ -1101,7 +1278,7 @@
 <pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
     <span class="keyword">template</span> <span class="special">&lt;</span>
         <span class="keyword">typename</span> <span class="identifier">Final</span><span class="special">,</span>
- <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">UT</span><span class="special">,</span>
         <span class="keyword">typename</span> <span class="identifier">MetaMixinSeq</span><span class="special">=</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">vector0</span><span class="special">&lt;&gt;,</span>
         <span class="keyword">typename</span> <span class="identifier">Base</span><span class="special">=</span><span class="identifier">base_private_opaque_type</span>
     <span class="special">&gt;</span>
@@ -1114,26 +1291,51 @@
         Class Template private_opaque_type&lt;&gt;">
         Class Template <code class="computeroutput"><span class="identifier">private_opaque_type</span><span class="special">&lt;&gt;</span></code></a>
 </h4></div></div></div>
+<p>
+ <code class="computeroutput"><span class="identifier">private_opaque_type</span><span class="special">&lt;&gt;</span></code>
+ provides the equivalent of <code class="computeroutput"><span class="identifier">private_opaque_class</span><span class="special">&lt;&gt;</span></code> but can be used as a typedef.
+ </p>
 <pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span>
     <span class="keyword">typename</span> <span class="identifier">Final</span><span class="special">,</span>
- <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">UT</span><span class="special">,</span>
     <span class="keyword">typename</span> <span class="identifier">MetaMixinSeq</span><span class="special">,</span>
     <span class="keyword">typename</span> <span class="identifier">Base</span>
 <span class="special">&gt;</span>
 <span class="keyword">class</span> <span class="identifier">private_opaque_type</span> <span class="special">:</span> <span class="keyword">public</span>
     <span class="identifier">private_opaque_class</span><span class="special">&lt;</span>
- <span class="identifier">private_opaque_type</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">,</span><span class="identifier">Tag</span><span class="special">,</span><span class="identifier">MetaMixinSeq</span><span class="special">,</span><span class="identifier">Base</span><span class="special">&gt;,</span> <span class="identifier">T</span><span class="special">,</span> <span class="identifier">MetaMixinSeq</span><span class="special">,</span> <span class="identifier">Base</span><span class="special">&gt;</span>
+ <span class="identifier">private_opaque_type</span><span class="special">&lt;</span><span class="identifier">UT</span><span class="special">,</span><span class="identifier">Tag</span><span class="special">,</span><span class="identifier">MetaMixinSeq</span><span class="special">,</span><span class="identifier">Base</span><span class="special">&gt;,</span> <span class="identifier">UT</span><span class="special">,</span> <span class="identifier">MetaMixinSeq</span><span class="special">,</span> <span class="identifier">Base</span><span class="special">&gt;</span>
 <span class="special">{</span>
 <span class="keyword">public</span><span class="special">:</span>
 
     <span class="identifier">private_opaque_type</span><span class="special">();</span>
     <span class="identifier">private_opaque_type</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">private_opaque_class</span> <span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">);</span>
     <span class="identifier">private_opaque_type</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Final</span> <span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">);</span>
- <span class="keyword">explicit</span> <span class="identifier">private_opaque_type</span><span class="special">(</span><span class="identifier">T</span> <span class="identifier">v</span><span class="special">);</span>
+ <span class="keyword">explicit</span> <span class="identifier">private_opaque_type</span><span class="special">(</span><span class="identifier">UT</span> <span class="identifier">v</span><span class="special">);</span>
     <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">W</span><span class="special">&gt;</span>
     <span class="keyword">explicit</span> <span class="identifier">private_opaque_type</span><span class="special">(</span><span class="identifier">W</span> <span class="identifier">v</span><span class="special">);</span>
 <span class="special">};</span>
 </pre>
+<p>
+ <span class="bold"><strong>Requirements</strong></span>
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ <code class="computeroutput"><span class="identifier">UT</span></code> must be a model
+ of a CopyCOnstructible and Assignable.
+ </li>
+<li>
+ <code class="computeroutput"><span class="identifier">Tag</span></code> must be a unique
+ class.
+ </li>
+<li>
+ <code class="computeroutput"><span class="identifier">MetaMixinSeq</span></code> must be
+ a model of FinalUnderlying: defaulted to the empty sequence.
+ </li>
+<li>
+ <code class="computeroutput"><span class="identifier">Base</span></code> is defaulted to
+ the base class of all the new types <code class="computeroutput"><span class="identifier">base_new_type</span></code>.
+ </li>
+</ul></div>
 </div>
 </div>
 <div class="section" lang="en">
@@ -1158,33 +1360,22 @@
 
     <span class="keyword">template</span> <span class="special">&lt;</span>
         <span class="keyword">typename</span> <span class="identifier">Final</span><span class="special">,</span>
- <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">UT</span><span class="special">,</span>
         <span class="keyword">typename</span> <span class="identifier">MetaMixinSeq</span><span class="special">=</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">vector0</span><span class="special">&lt;&gt;,</span>
         <span class="keyword">typename</span> <span class="identifier">Base</span><span class="special">=</span><span class="identifier">base_public_opaque_type</span>
     <span class="special">&gt;</span>
     <span class="keyword">class</span> <span class="identifier">public_opaque_class</span><span class="special">;</span>
 <span class="special">}</span>
 </pre>
-<div class="itemizedlist"><ul type="disc">
-<li>
- Can instances of UT be explicitly converted to instances of OT? Yes
- </li>
-<li>
- Can instances of UT be implicitly converted to instances of OT? No
- </li>
-<li>
- Can instances of OT be explicitly converted to instances of UT? Yes
- </li>
-<li>
- Can instances of OT be implicitly converted to instances of UT? Yes
- </li>
-</ul></div>
 <div class="section" lang="en">
 <div class="titlepage"><div><div><h4 class="title">
 <a name="boost.opaque.reference.public_opaque_class_hpp.private_opaque_class"></a><a href="index.html#boost.opaque.reference.public_opaque_class_hpp.private_opaque_class" title="
         Class base_public_opaque_type">
         Class <code class="computeroutput"><span class="identifier">base_public_opaque_type</span></code></a>
 </h4></div></div></div>
+<p>
+ This is the base class of all the public opaque types.
+ </p>
 <pre class="programlisting"><span class="keyword">class</span> <span class="identifier">base_public_opaque_type</span> <span class="special">{};</span>
 </pre>
 </div>
@@ -1199,6 +1390,10 @@
     <span class="keyword">typedef</span> <span class="special">&lt;</span><span class="identifier">see</span> <span class="identifier">below</span><span class="special">&gt;</span> <span class="identifier">type</span><span class="special">;</span>
 <span class="special">}</span>
 </pre>
+<p>
+ The nested typedef <code class="computeroutput"><span class="identifier">type</span></code>
+ is an MPL sequence of all the UT in the opaque type hierarchy.
+ </p>
 </div>
 <div class="section" lang="en">
 <div class="titlepage"><div><div><h4 class="title">
@@ -1206,18 +1401,52 @@
         Class Template public_opaque_class&lt;&gt;">
         Class Template <code class="computeroutput"><span class="identifier">public_opaque_class</span><span class="special">&lt;&gt;</span></code></a>
 </h4></div></div></div>
+<p>
+ Resuming:
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ Can instances of UT be explicitly converted to instances of OT? Yes
+ </li>
+<li>
+ Can instances of UT be implicitly converted to instances of OT? No
+ </li>
+<li>
+ Can instances of OT be explicitly converted to instances of UT? Yes
+ </li>
+<li>
+ Can instances of OT be explicitly converted to instances of convertible
+ to UT? Yes
+ </li>
+<li>
+ Can instances of OT be implicitly converted to instances of UT? Yes
+ </li>
+<li>
+ Can instances of OT be implicitly converted to instances of convertible
+ to UT? Yes
+ </li>
+</ul></div>
+<p>
+ <code class="computeroutput"><span class="identifier">public_opaque_class</span><span class="special">&lt;&gt;</span></code>
+ is a <code class="computeroutput"><span class="identifier">new_class</span></code> with the
+ <code class="computeroutput"><span class="identifier">transitive_substituable</span><span class="special">&lt;</span><span class="identifier">base_public_opaque_type</span><span class="special">&gt;</span></code> and <code class="computeroutput"><span class="identifier">inherited_from_underlying</span><span class="special">&lt;</span><span class="identifier">UT</span><span class="special">&gt;</span></code> added to the sequence of meta-mixins
+ MetaMixinSeq, so a public_opaque_type inherits from all the operations
+ of tye underlying type and adds transitive implicit conversions to all
+ the substituables. The nested typedef <code class="computeroutput"><span class="identifier">substituables</span></code>
+ is the MPL sequence of all the UT in the opaque type hierarchy.
+ </p>
 <pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span>
     <span class="keyword">typename</span> <span class="identifier">Final</span><span class="special">,</span>
- <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">UT</span><span class="special">,</span>
     <span class="keyword">typename</span> <span class="identifier">MetaMixinSeq</span><span class="special">=</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">vector0</span><span class="special">&lt;&gt;,</span>
     <span class="keyword">typename</span> <span class="identifier">Base</span><span class="special">=</span><span class="identifier">base_public_opaque_type</span>
 <span class="special">&gt;</span>
 <span class="keyword">class</span> <span class="identifier">public_opaque_class</span>
- <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">new_class</span><span class="special">&lt;</span> <span class="identifier">Final</span><span class="special">,</span> <span class="identifier">T</span><span class="special">,</span>
+ <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">new_class</span><span class="special">&lt;</span> <span class="identifier">Final</span><span class="special">,</span> <span class="identifier">UT</span><span class="special">,</span>
         <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">push</span><span class="special">&lt;</span>
             <span class="identifier">transitive_substituable</span><span class="special">&lt;</span><span class="identifier">base_public_opaque_type</span><span class="special">&gt;,</span>
             <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">push</span><span class="special">&lt;</span>
- <span class="identifier">inherited_from_undelying</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;,</span>
+ <span class="identifier">inherited_from_underlying</span><span class="special">&lt;</span><span class="identifier">UT</span><span class="special">&gt;,</span>
                 <span class="identifier">MetaMixinSeq</span>
             <span class="special">&gt;</span>
         <span class="special">&gt;,</span>
@@ -1230,38 +1459,12 @@
     <span class="identifier">public_opaque_class</span><span class="special">();</span>
     <span class="identifier">public_opaque_class</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">public_opaque_class</span> <span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">);</span>
     <span class="identifier">public_opaque_class</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Final</span> <span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">);</span>
- <span class="keyword">explicit</span> <span class="identifier">public_opaque_class</span><span class="special">(</span><span class="identifier">T</span> <span class="identifier">v</span><span class="special">);</span>
- <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">W</span><span class="special">&gt;</span>
- <span class="keyword">explicit</span> <span class="identifier">public_opaque_class</span><span class="special">(</span><span class="identifier">W</span> <span class="identifier">v</span><span class="special">);</span>
-
-<span class="special">};</span>
-</pre>
-<p>
- template &lt; typename Final, typename T, typename MetaMixinSeq=boost::mpl::vector0&lt;&gt;,
- typename Base=base_public_opaque_type &gt; class public_opaque_class :
- public new_class&lt; Final, T, mpl::push&lt; transitive_substituable&lt;base_public_opaque_type&gt;,
- mpl::push&lt; inherited_from_undelying&lt;T&gt;, MetaMixinSeq &gt; &gt;,
- Base &gt; { public: typedef &lt;see below&gt; substituables;
- </p>
-<pre class="programlisting"> <span class="identifier">public_opaque_class</span><span class="special">();</span>
- <span class="identifier">public_opaque_class</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">public_opaque_class</span> <span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">);</span>
- <span class="identifier">public_opaque_class</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Final</span> <span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">);</span>
- <span class="keyword">explicit</span> <span class="identifier">public_opaque_class</span><span class="special">(</span><span class="identifier">T</span> <span class="identifier">v</span><span class="special">);</span>
+ <span class="keyword">explicit</span> <span class="identifier">public_opaque_class</span><span class="special">(</span><span class="identifier">UT</span> <span class="identifier">v</span><span class="special">);</span>
     <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">W</span><span class="special">&gt;</span>
     <span class="keyword">explicit</span> <span class="identifier">public_opaque_class</span><span class="special">(</span><span class="identifier">W</span> <span class="identifier">v</span><span class="special">);</span>
 
 <span class="special">};</span>
 </pre>
-<p>
- public_opaque_class(); public_opaque_class(const public_opaque_class &amp;
- rhs); public_opaque_class(const Final &amp; rhs); explicit public_opaque_class(T
- v); template &lt;typename W&gt; explicit public_opaque_class(W v);
- </p>
-<pre class="programlisting"><span class="special">};</span>
-</pre>
-<p>
- };
- </p>
 </div>
 </div>
 <div class="section" lang="en">
@@ -1275,7 +1478,7 @@
 <pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
     <span class="keyword">template</span> <span class="special">&lt;</span>
         <span class="keyword">typename</span> <span class="identifier">Final</span><span class="special">,</span>
- <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">UT</span><span class="special">,</span>
         <span class="keyword">typename</span> <span class="identifier">MetaMixinSeq</span><span class="special">=</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">vector0</span><span class="special">&lt;&gt;,</span>
         <span class="keyword">typename</span> <span class="identifier">Base</span><span class="special">=</span><span class="identifier">base_public_opaque_type</span>
     <span class="special">&gt;</span>
@@ -1288,26 +1491,51 @@
         Class Template public_opaque_type&lt;&gt;">
         Class Template <code class="computeroutput"><span class="identifier">public_opaque_type</span><span class="special">&lt;&gt;</span></code></a>
 </h4></div></div></div>
+<p>
+ <code class="computeroutput"><span class="identifier">private_opaque_typublic_opaque_typepe</span><span class="special">&lt;&gt;</span></code> provides the equivalent of <code class="computeroutput"><span class="identifier">public_opaque_class</span><span class="special">&lt;&gt;</span></code>
+ but can be used as a typedef.
+ </p>
 <pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span>
     <span class="keyword">typename</span> <span class="identifier">Final</span><span class="special">,</span>
- <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span>
+ <span class="keyword">typename</span> <span class="identifier">UT</span><span class="special">,</span>
     <span class="keyword">typename</span> <span class="identifier">MetaMixinSeq</span><span class="special">,</span>
     <span class="keyword">typename</span> <span class="identifier">Base</span>
 <span class="special">&gt;</span>
 <span class="keyword">class</span> <span class="identifier">public_opaque_type</span> <span class="special">:</span> <span class="keyword">public</span>
     <span class="identifier">public_opaque_class</span><span class="special">&lt;</span>
- <span class="identifier">public_opaque_type</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">,</span><span class="identifier">Tag</span><span class="special">,</span><span class="identifier">MetaMixinSeq</span><span class="special">,</span><span class="identifier">Base</span><span class="special">&gt;,</span> <span class="identifier">T</span><span class="special">,</span> <span class="identifier">MetaMixinSeq</span><span class="special">,</span> <span class="identifier">Base</span><span class="special">&gt;</span>
+ <span class="identifier">public_opaque_type</span><span class="special">&lt;</span><span class="identifier">UT</span><span class="special">,</span><span class="identifier">Tag</span><span class="special">,</span><span class="identifier">MetaMixinSeq</span><span class="special">,</span><span class="identifier">Base</span><span class="special">&gt;,</span> <span class="identifier">UT</span><span class="special">,</span> <span class="identifier">MetaMixinSeq</span><span class="special">,</span> <span class="identifier">Base</span><span class="special">&gt;</span>
 <span class="special">{</span>
 <span class="keyword">public</span><span class="special">:</span>
 
     <span class="identifier">public_opaque_type</span><span class="special">();</span>
     <span class="identifier">public_opaque_type</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">public_opaque_type</span> <span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">);</span>
     <span class="identifier">public_opaque_type</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">Final</span> <span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">);</span>
- <span class="keyword">explicit</span> <span class="identifier">public_opaque_type</span><span class="special">(</span><span class="identifier">T</span> <span class="identifier">v</span><span class="special">);</span>
+ <span class="keyword">explicit</span> <span class="identifier">public_opaque_type</span><span class="special">(</span><span class="identifier">UT</span> <span class="identifier">v</span><span class="special">);</span>
     <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">W</span><span class="special">&gt;</span>
     <span class="keyword">explicit</span> <span class="identifier">public_opaque_type</span><span class="special">(</span><span class="identifier">W</span> <span class="identifier">v</span><span class="special">);</span>
 <span class="special">};</span>
 </pre>
+<p>
+ <span class="bold"><strong>Requirements</strong></span>
+ </p>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ <code class="computeroutput"><span class="identifier">UT</span></code> must be a model
+ of a CopyCOnstructible and Assignable.
+ </li>
+<li>
+ <code class="computeroutput"><span class="identifier">Tag</span></code> must be a unique
+ class.
+ </li>
+<li>
+ <code class="computeroutput"><span class="identifier">MetaMixinSeq</span></code> must be
+ a model of FinalUnderlying: defaulted to the empty sequence.
+ </li>
+<li>
+ <code class="computeroutput"><span class="identifier">Base</span></code> is defaulted to
+ the base class of all the new types <code class="computeroutput"><span class="identifier">base_new_type</span></code>.
+ </li>
+</ul></div>
 </div>
 </div>
 <div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title">
@@ -1332,29 +1560,39 @@
           <code class="computeroutput"><span class="identifier">MetaMixinSequence</span></code></a></span></dt>
 </dl></dd>
 <dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.linear_hierarchy_hpp">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">metamixin</span><span class="special">/</span><span class="identifier">linear_hierarchy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">meta_mixin</span><span class="special">/</span><span class="identifier">linear_hierarchy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
 <dd><dl><dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.linear_hierarchy_hpp.linear_hierarchy">
           Class Template <code class="computeroutput"><span class="identifier">linear_hierarchy</span><span class="special">&lt;&gt;</span></code></a></span></dt></dl></dd>
-<dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.inherited_from_undelying_hpp">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">metamixin</span><span class="special">/</span><span class="identifier">inherited_from_undelying</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
-<dd><dl><dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.inherited_from_undelying_hpp.inherited_from_undelying">
- Class Template <code class="computeroutput"><span class="identifier">inherited_from_undelying</span><span class="special">&lt;&gt;</span></code></a></span></dt></dl></dd>
+<dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.inherited_from_underlying_hpp">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">meta_mixin</span><span class="special">/</span><span class="identifier">inherited_from_underlying</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dd><dl><dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.inherited_from_underlying_hpp.inherited_from_underlying">
+ Class Template <code class="computeroutput"><span class="identifier">inherited_from_underlying</span><span class="special">&lt;&gt;</span></code></a></span></dt></dl></dd>
 <dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.using_operators_hpp">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">metamixin</span><span class="special">/</span><span class="identifier">using_operators</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
-<dd><dl><dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.using_operators_hpp.arithmetic_operators">Arithmetic
- Operators</a></span></dt></dl></dd>
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">meta_mixin</span><span class="special">/</span><span class="identifier">using_operators</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+<dd><dl>
+<dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.using_operators_hpp.arithmetic_operators">Arithmetic
+ Operators</a></span></dt>
+<dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.using_operators_hpp.logical_operators">Logical
+ Operators</a></span></dt>
+<dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.using_operators_hpp.conversion_operators">Conversion
+ Operators</a></span></dt>
+<dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.using_operators_hpp.dereference_operators">Dereference
+ Operators</a></span></dt>
+<dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.using_operators_hpp.other_operators">Other
+ Operators</a></span></dt>
+</dl></dd>
 <dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.hiding_operators_hpp">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">metamixin</span><span class="special">/</span><span class="identifier">hiding_operators</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">meta_mixin</span><span class="special">/</span><span class="identifier">hiding_operators</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
 <dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.using_combined_operators_hpp">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">metamixin</span><span class="special">/</span><span class="identifier">using_combined_operators</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">meta_mixin</span><span class="special">/</span><span class="identifier">using_combined_operators</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
 <dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.hiding_combined_operators_hpp">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">metamixin</span><span class="special">/</span><span class="identifier">hiding_combined_operators</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">meta_mixin</span><span class="special">/</span><span class="identifier">hiding_combined_operators</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
 <dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.transitive_substituable_hpp">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">metamixin</span><span class="special">/</span><span class="identifier">transitive_substituable</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">meta_mixin</span><span class="special">/</span><span class="identifier">transitive_substituable</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
 <dd><dl><dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.transitive_substituable_hpp.transitive_substituable">
           Class Template <code class="computeroutput"><span class="identifier">transitive_substituable</span><span class="special">&lt;&gt;</span></code></a></span></dt></dl></dd>
 <dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.transitive_explicit_substituable_hpp">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">metamixin</span><span class="special">/</span><span class="identifier">transitive_explicit_substituable</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">meta_mixin</span><span class="special">/</span><span class="identifier">transitive_explicit_substituable</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a></span></dt>
 <dd><dl><dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.transitive_explicit_substituable_hpp.transitive_explicit_substituable">
           Class Template <code class="computeroutput"><span class="identifier">transitive_explicit_substituable</span><span class="special">&lt;&gt;</span></code></a></span></dt></dl></dd>
 </dl></div>
@@ -1464,7 +1702,9 @@
 <span class="special">};</span>
 </pre>
 <p>
- The Final class must make the following
+ The <code class="computeroutput"><span class="identifier">Final</span></code> class must
+ satisfy the <code class="computeroutput"><span class="identifier">FinalUnderlying</span></code>
+ requirements.
           </p>
 </div>
 <div class="section" lang="en">
@@ -1485,6 +1725,11 @@
     <span class="special">};</span>
 <span class="special">};</span>
 </pre>
+<p>
+ The <code class="computeroutput"><span class="identifier">Final</span></code> class must
+ satisfy the <code class="computeroutput"><span class="identifier">FinalUnderlying</span></code>
+ requirements.
+ </p>
 </div>
 <div class="section" lang="en">
 <div class="titlepage"><div><div><h5 class="title">
@@ -1501,8 +1746,8 @@
 <div class="section" lang="en">
 <div class="titlepage"><div><div><h4 class="title">
 <a name="boost.opaque.reference.meta_mixins.linear_hierarchy_hpp"></a><a href="index.html#boost.opaque.reference.meta_mixins.linear_hierarchy_hpp" title="
- Header &lt;boost/opaque/metamixin/linear_hierarchy.hpp&gt;">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">metamixin</span><span class="special">/</span><span class="identifier">linear_hierarchy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+ Header &lt;boost/opaque/meta_mixin/linear_hierarchy.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">meta_mixin</span><span class="special">/</span><span class="identifier">linear_hierarchy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
 </h4></div></div></div>
 <div class="toc"><dl><dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.linear_hierarchy_hpp.linear_hierarchy">
           Class Template <code class="computeroutput"><span class="identifier">linear_hierarchy</span><span class="special">&lt;&gt;</span></code></a></span></dt></dl></div>
@@ -1536,30 +1781,30 @@
 </div>
 <div class="section" lang="en">
 <div class="titlepage"><div><div><h4 class="title">
-<a name="boost.opaque.reference.meta_mixins.inherited_from_undelying_hpp"></a><a href="index.html#boost.opaque.reference.meta_mixins.inherited_from_undelying_hpp" title="
- Header &lt;boost/opaque/metamixin/inherited_from_undelying.hpp&gt;">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">metamixin</span><span class="special">/</span><span class="identifier">inherited_from_undelying</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+<a name="boost.opaque.reference.meta_mixins.inherited_from_underlying_hpp"></a><a href="index.html#boost.opaque.reference.meta_mixins.inherited_from_underlying_hpp" title="
+ Header &lt;boost/opaque/meta_mixin/inherited_from_underlying.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">meta_mixin</span><span class="special">/</span><span class="identifier">inherited_from_underlying</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
 </h4></div></div></div>
-<div class="toc"><dl><dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.inherited_from_undelying_hpp.inherited_from_undelying">
- Class Template <code class="computeroutput"><span class="identifier">inherited_from_undelying</span><span class="special">&lt;&gt;</span></code></a></span></dt></dl></div>
+<div class="toc"><dl><dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.inherited_from_underlying_hpp.inherited_from_underlying">
+ Class Template <code class="computeroutput"><span class="identifier">inherited_from_underlying</span><span class="special">&lt;&gt;</span></code></a></span></dt></dl></div>
 <pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
     <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Bool</span><span class="special">=</span><span class="keyword">bool</span><span class="special">&gt;</span>
- <span class="keyword">struct</span> <span class="identifier">inherited_from_undelying</span><span class="special">;</span>
+ <span class="keyword">struct</span> <span class="identifier">inherited_from_underlying</span><span class="special">;</span>
 <span class="special">}</span>
 </pre>
 <div class="section" lang="en">
 <div class="titlepage"><div><div><h5 class="title">
-<a name="boost.opaque.reference.meta_mixins.inherited_from_undelying_hpp.inherited_from_undelying"></a><a href="index.html#boost.opaque.reference.meta_mixins.inherited_from_undelying_hpp.inherited_from_undelying" title="
- Class Template inherited_from_undelying&lt;&gt;">
- Class Template <code class="computeroutput"><span class="identifier">inherited_from_undelying</span><span class="special">&lt;&gt;</span></code></a>
+<a name="boost.opaque.reference.meta_mixins.inherited_from_underlying_hpp.inherited_from_underlying"></a><a href="index.html#boost.opaque.reference.meta_mixins.inherited_from_underlying_hpp.inherited_from_underlying" title="
+ Class Template inherited_from_underlying&lt;&gt;">
+ Class Template <code class="computeroutput"><span class="identifier">inherited_from_underlying</span><span class="special">&lt;&gt;</span></code></a>
 </h5></div></div></div>
 <pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Bool</span><span class="special">&gt;</span>
-<span class="keyword">struct</span> <span class="identifier">inherited_from_undelying</span><span class="special">;</span>
+<span class="keyword">struct</span> <span class="identifier">inherited_from_underlying</span><span class="special">;</span>
 </pre>
 <p>
- <code class="computeroutput"><span class="identifier">inherited_from_undelying</span></code>
+ <code class="computeroutput"><span class="identifier">inherited_from_underlying</span></code>
             is a <code class="computeroutput"><span class="identifier">MetaMixin</span></code> which
- add wrapping member to the underlyibg type <code class="computeroutput"><span class="identifier">UT</span></code>.
+ adds wrapping member to the underlyibg type <code class="computeroutput"><span class="identifier">UT</span></code>.
           </p>
 <p>
             This class must specialized for specific types in order to make easier
@@ -1568,13 +1813,13 @@
             each one of the buil-in types.
           </p>
 <pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Bool</span><span class="special">&gt;</span>
-<span class="keyword">struct</span> <span class="identifier">inherited_from_undelying</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;</span> <span class="special">{</span>
+<span class="keyword">struct</span> <span class="identifier">inherited_from_underlying</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;</span> <span class="special">{</span>
     <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Final</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Base</span><span class="special">&gt;</span>
     <span class="keyword">struct</span> <span class="identifier">type</span><span class="special">;</span> <span class="comment">//implementation defined
 </span><span class="special">};</span>
 </pre>
 <p>
- template &lt;typename Bool&gt; struct inherited_from_undelying&lt;int&gt;
+ template &lt;typename Bool&gt; struct inherited_from_underlying&lt;int&gt;
             { template &lt;typename Final, typename Base&gt; struct type; //implementation
             defined };
           </p>
@@ -1583,11 +1828,21 @@
 <div class="section" lang="en">
 <div class="titlepage"><div><div><h4 class="title">
 <a name="boost.opaque.reference.meta_mixins.using_operators_hpp"></a><a href="index.html#boost.opaque.reference.meta_mixins.using_operators_hpp" title="
- Header &lt;boost/opaque/metamixin/using_operators.hpp&gt;">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">metamixin</span><span class="special">/</span><span class="identifier">using_operators</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+ Header &lt;boost/opaque/meta_mixin/using_operators.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">meta_mixin</span><span class="special">/</span><span class="identifier">using_operators</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
 </h4></div></div></div>
-<div class="toc"><dl><dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.using_operators_hpp.arithmetic_operators">Arithmetic
- Operators</a></span></dt></dl></div>
+<div class="toc"><dl>
+<dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.using_operators_hpp.arithmetic_operators">Arithmetic
+ Operators</a></span></dt>
+<dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.using_operators_hpp.logical_operators">Logical
+ Operators</a></span></dt>
+<dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.using_operators_hpp.conversion_operators">Conversion
+ Operators</a></span></dt>
+<dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.using_operators_hpp.dereference_operators">Dereference
+ Operators</a></span></dt>
+<dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.using_operators_hpp.other_operators">Other
+ Operators</a></span></dt>
+</dl></div>
 <p>
           This file includes meta-mixins that are used to add un operator overloads
           forwarding from the Final type to the underlying type. There is a meta-mixins
@@ -1660,7 +1915,9 @@
                 rhs_ut is the instance UT reference obtained rhs.underlying()
               </li>
 </ul></div>
-<div class="informaltable"><table class="table">
+<div class="table">
+<a name="boost.opaque.reference.meta_mixins.using_operators_hpp.arithmetic_operators.relational_operators"></a><p class="title"><b>Table&#160;1.&#160;Relational operators</b></p>
+<table class="table" summary="Relational operators">
 <colgroup>
 <col>
 <col>
@@ -1693,264 +1950,306 @@
 <tr>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">using_underlying_conversion</span><span class="special">&lt;</span><span class="identifier">UT</span><span class="special">&gt;</span></code>
+ <code class="computeroutput"><span class="identifier">using_equal</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="keyword">operator</span> <span class="identifier">UT</span><span class="special">()</span> <span class="keyword">const</span></code>
+ <code class="computeroutput"><span class="identifier">Bool</span> <span class="keyword">operator</span><span class="special">==(</span><span class="keyword">const</span>
+ <span class="identifier">NT</span><span class="special">&amp;</span>
+ <span class="identifier">rhs</span><span class="special">)</span>
+ <span class="keyword">const</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- None
+ <code class="computeroutput"><span class="identifier">Bool</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">==</span>
+ <span class="identifier">rhs_ut</span><span class="special">)</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- 12.3.2
+ 13.5.2
                     </p>
                   </td>
 </tr>
 <tr>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">using_conversion_to</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;</span></code>
+ <code class="computeroutput"><span class="identifier">using_not_equal</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="keyword">operator</span> <span class="identifier">T</span><span class="special">()</span> <span class="keyword">const</span></code>
+ <code class="computeroutput"><span class="identifier">Bool</span> <span class="keyword">operator</span><span class="special">!=(</span><span class="keyword">const</span>
+ <span class="identifier">NT</span><span class="special">&amp;</span>
+ <span class="identifier">rhs</span><span class="special">)</span>
+ <span class="keyword">const</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">T</span><span class="special">(</span><span class="identifier">ut</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">Bool</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">!=</span>
+ <span class="identifier">rhs_ut</span><span class="special">)</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- 12.3.2
+ 13.5.2
                     </p>
                   </td>
 </tr>
 <tr>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">using_safe_bool_conversion</span></code>
+ <code class="computeroutput"><span class="identifier">using_less_than</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="keyword">operator</span> <span class="identifier">unspecified_bool_type</span><span class="special">()</span> <span class="keyword">const</span></code>
+ <code class="computeroutput"><span class="identifier">Bool</span> <span class="keyword">operator</span><span class="special">&lt;(</span><span class="keyword">const</span>
+ <span class="identifier">NT</span><span class="special">&amp;</span>
+ <span class="identifier">rhs</span><span class="special">)</span>
+ <span class="keyword">const</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">ut</span><span class="special">?</span><span class="keyword">true</span><span class="special">:</span><span class="keyword">false</span></code>
+ <code class="computeroutput"><span class="identifier">Bool</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">&lt;</span>
+ <span class="identifier">rhs_ut</span><span class="special">)</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- 12.3.2
+ 13.5.2
                     </p>
                   </td>
 </tr>
 <tr>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">using_logical_not</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ <code class="computeroutput"><span class="identifier">using_less_than_equal</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">Bool</span> <span class="keyword">operator</span><span class="special">!=()</span> <span class="keyword">const</span></code>
+ <code class="computeroutput"><span class="identifier">Bool</span> <span class="keyword">operator</span><span class="special">&lt;=(</span><span class="keyword">const</span>
+ <span class="identifier">NT</span><span class="special">&amp;</span>
+ <span class="identifier">rhs</span><span class="special">)</span>
+ <span class="keyword">const</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">Bool</span><span class="special">(!</span><span class="identifier">this_ut</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">Bool</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">&lt;=</span>
+ <span class="identifier">rhs_ut</span><span class="special">)</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- 13.5.1
+ 13.5.2
                     </p>
                   </td>
 </tr>
 <tr>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">using_unary_plus</span></code>
+ <code class="computeroutput"><span class="identifier">using_greater_than_equal</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">+()</span> <span class="keyword">const</span></code>
+ <code class="computeroutput"><span class="identifier">Bool</span> <span class="keyword">operator</span><span class="special">&gt;=(</span><span class="keyword">const</span>
+ <span class="identifier">NT</span><span class="special">&amp;</span>
+ <span class="identifier">rhs</span><span class="special">)</span>
+ <span class="keyword">const</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">NT</span><span class="special">(+</span><span class="identifier">this_ut</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">Bool</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">&gt;=</span>
+ <span class="identifier">rhs_ut</span><span class="special">)</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- 13.5.1
+ 13.5.2
                     </p>
                   </td>
 </tr>
 <tr>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">using_unary_minus</span></code>
+ <code class="computeroutput"><span class="identifier">using_greater_than</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">-()</span> <span class="keyword">const</span></code>
+ <code class="computeroutput"><span class="identifier">Bool</span> <span class="keyword">operator</span><span class="special">&gt;(</span><span class="keyword">const</span>
+ <span class="identifier">NT</span><span class="special">&amp;</span>
+ <span class="identifier">rhs</span><span class="special">)</span>
+ <span class="keyword">const</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">NT</span><span class="special">(-</span><span class="identifier">this_ut</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">Bool</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">&gt;</span>
+ <span class="identifier">rhs_ut</span><span class="special">)</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- 13.5.1
+ 13.5.2
                     </p>
                   </td>
 </tr>
 <tr>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">using_bitwise_not</span></code>
+ <code class="computeroutput"><span class="identifier">using_equal2</span><span class="special">&lt;</span><span class="identifier">NT2</span><span class="special">,</span> <span class="identifier">Bool</span><span class="special">&gt;</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">~()</span> <span class="keyword">const</span></code>
+ <code class="computeroutput"><span class="identifier">Bool</span> <span class="keyword">operator</span><span class="special">==(</span><span class="keyword">const</span>
+ <span class="identifier">NT2</span><span class="special">&amp;</span>
+ <span class="identifier">rhs</span><span class="special">)</span>
+ <span class="keyword">const</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">NT</span><span class="special">(~</span><span class="identifier">this_ut</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">Bool</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">==</span>
+ <span class="identifier">rhs_ut</span><span class="special">)</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- 13.5.1
+ 13.5.2
                     </p>
                   </td>
 </tr>
 <tr>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">using_pre_increment</span></code>
+ <code class="computeroutput"><span class="identifier">using_not_equal2</span><span class="special">&lt;</span><span class="identifier">NT2</span><span class="special">,</span> <span class="identifier">Bool</span><span class="special">&gt;</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">NT</span><span class="special">&amp;</span>
- <span class="keyword">operator</span><span class="special">++()</span></code>
+ <code class="computeroutput"><span class="identifier">Bool</span> <span class="keyword">operator</span><span class="special">!=(</span><span class="keyword">const</span>
+ <span class="identifier">NT2</span><span class="special">&amp;</span>
+ <span class="identifier">rhs</span><span class="special">)</span>
+ <span class="keyword">const</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="special">++</span><span class="identifier">this_ut</span></code>
+ <code class="computeroutput"><span class="identifier">Bool</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">!=</span>
+ <span class="identifier">rhs_ut</span><span class="special">)</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- 13.5.1
+ 13.5.2
                     </p>
                   </td>
 </tr>
 <tr>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">using_pre_decrement</span></code>
+ <code class="computeroutput"><span class="identifier">using_less_than2</span><span class="special">&lt;</span><span class="identifier">NT2</span><span class="special">,</span> <span class="identifier">Bool</span><span class="special">&gt;</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">NT</span><span class="special">&amp;</span>
- <span class="keyword">operator</span><span class="special">--()</span></code>
+ <code class="computeroutput"><span class="identifier">Bool</span> <span class="keyword">operator</span><span class="special">&lt;(</span><span class="keyword">const</span>
+ <span class="identifier">NT</span><span class="special">&amp;</span>
+ <span class="identifier">rhs</span><span class="special">)</span>
+ <span class="keyword">const</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="special">--</span><span class="identifier">this_ut</span></code>
+ <code class="computeroutput"><span class="identifier">Bool</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">&lt;</span>
+ <span class="identifier">rhs_ut</span><span class="special">)</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- 13.5.1
+ 13.5.2
                     </p>
                   </td>
 </tr>
 <tr>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">using_post_increment</span></code>
+ <code class="computeroutput"><span class="identifier">using_less_than_equal2</span><span class="special">&lt;</span><span class="identifier">NT2</span><span class="special">,</span> <span class="identifier">Bool</span><span class="special">&gt;</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">++(</span><span class="keyword">int</span><span class="special">)</span> <span class="keyword">const</span></code>
+ <code class="computeroutput"><span class="identifier">Bool</span> <span class="keyword">operator</span><span class="special">&lt;=(</span><span class="keyword">const</span>
+ <span class="identifier">NT2</span><span class="special">&amp;</span>
+ <span class="identifier">rhs</span><span class="special">)</span>
+ <span class="keyword">const</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">this_ut</span><span class="special">++</span></code>
+ <code class="computeroutput"><span class="identifier">Bool</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">&lt;=</span>
+ <span class="identifier">rhs_ut</span><span class="special">)</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- 13.5.1
+ 13.5.2
                     </p>
                   </td>
 </tr>
 <tr>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">using_post_decrement</span></code>
+ <code class="computeroutput"><span class="identifier">using_greater_than_equal2</span><span class="special">&lt;</span><span class="identifier">NT2</span><span class="special">,</span> <span class="identifier">Bool</span><span class="special">&gt;</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">--(</span><span class="keyword">int</span><span class="special">)</span> <span class="keyword">const</span></code>
+ <code class="computeroutput"><span class="identifier">Bool</span> <span class="keyword">operator</span><span class="special">&gt;=(</span><span class="keyword">const</span>
+ <span class="identifier">NT2</span><span class="special">&amp;</span>
+ <span class="identifier">rhs</span><span class="special">)</span>
+ <span class="keyword">const</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">this_ut</span><span class="special">++</span></code>
+ <code class="computeroutput"><span class="identifier">Bool</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">&gt;=</span>
+ <span class="identifier">rhs_ut</span><span class="special">)</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- 13.5.1
+ 13.5.2
                     </p>
                   </td>
 </tr>
 <tr>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">using_less_than</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ <code class="computeroutput"><span class="identifier">using_greater_than2</span><span class="special">&lt;</span><span class="identifier">NT2</span><span class="special">,</span> <span class="identifier">Bool</span><span class="special">&gt;</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">Bool</span> <span class="keyword">operator</span><span class="special">&lt;(</span><span class="keyword">const</span>
- <span class="identifier">NT</span><span class="special">&amp;</span>
+ <code class="computeroutput"><span class="identifier">Bool</span> <span class="keyword">operator</span><span class="special">&gt;(</span><span class="keyword">const</span>
+ <span class="identifier">NT2</span><span class="special">&amp;</span>
                       <span class="identifier">rhs</span><span class="special">)</span>
                       <span class="keyword">const</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">Bool</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">&lt;</span>
+ <code class="computeroutput"><span class="identifier">Bool</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">&gt;</span>
                       <span class="identifier">rhs_ut</span><span class="special">)</span></code>
                     </p>
                   </td>
@@ -1960,15 +2259,50 @@
                     </p>
                   </td>
 </tr>
+</tbody>
+</table>
+</div>
+<div class="table">
+<a name="boost.opaque.reference.meta_mixins.using_operators_hpp.arithmetic_operators.numeric_operators"></a><p class="title"><b>Table&#160;2.&#160;Numeric operators</b></p>
+<table class="table" summary="Numeric operators">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Meta-Mixin
+ </p>
+ </th>
+<th>
+ <p>
+ Supplied Operation
+ </p>
+ </th>
+<th>
+ <p>
+ Requirements
+ </p>
+ </th>
+<th>
+ <p>
+ Ref
+ </p>
+ </th>
+</tr></thead>
+<tbody>
 <tr>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">using_less_than_equal</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ <code class="computeroutput"><span class="identifier">using_plus</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">Bool</span> <span class="keyword">operator</span><span class="special">&lt;=(</span><span class="keyword">const</span>
+ <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">+(</span><span class="keyword">const</span>
                       <span class="identifier">NT</span><span class="special">&amp;</span>
                       <span class="identifier">rhs</span><span class="special">)</span>
                       <span class="keyword">const</span></code>
@@ -1976,7 +2310,7 @@
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">Bool</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">&lt;=</span>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">+</span>
                       <span class="identifier">rhs_ut</span><span class="special">)</span></code>
                     </p>
                   </td>
@@ -1989,21 +2323,19 @@
 <tr>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">using_greater_than_equal</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ <code class="computeroutput"><span class="identifier">using_plus_assign</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">Bool</span> <span class="keyword">operator</span><span class="special">&gt;=(</span><span class="keyword">const</span>
- <span class="identifier">NT</span><span class="special">&amp;</span>
- <span class="identifier">rhs</span><span class="special">)</span>
- <span class="keyword">const</span></code>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">&amp;</span>
+ <span class="keyword">operator</span><span class="special">+=(</span><span class="keyword">const</span> <span class="identifier">NT</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">Bool</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">&gt;=</span>
- <span class="identifier">rhs_ut</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">this_ut</span> <span class="special">+=</span>
+ <span class="identifier">rhs_ut</span></code>
                     </p>
                   </td>
 <td>
@@ -2015,12 +2347,12 @@
 <tr>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">using_greater_than</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ <code class="computeroutput"><span class="identifier">using_minus</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">Bool</span> <span class="keyword">operator</span><span class="special">&gt;(</span><span class="keyword">const</span>
+ <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">-(</span><span class="keyword">const</span>
                       <span class="identifier">NT</span><span class="special">&amp;</span>
                       <span class="identifier">rhs</span><span class="special">)</span>
                       <span class="keyword">const</span></code>
@@ -2028,7 +2360,7 @@
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">Bool</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">&gt;</span>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">-</span>
                       <span class="identifier">rhs_ut</span><span class="special">)</span></code>
                     </p>
                   </td>
@@ -2041,21 +2373,19 @@
 <tr>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">using_equal</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ <code class="computeroutput"><span class="identifier">using_minus_assign</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">Bool</span> <span class="keyword">operator</span><span class="special">==(</span><span class="keyword">const</span>
- <span class="identifier">NT</span><span class="special">&amp;</span>
- <span class="identifier">rhs</span><span class="special">)</span>
- <span class="keyword">const</span></code>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">&amp;</span>
+ <span class="keyword">operator</span><span class="special">-=(</span><span class="keyword">const</span> <span class="identifier">NT</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">Bool</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">==</span>
- <span class="identifier">rhs_ut</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">this_ut</span> <span class="special">-=</span>
+ <span class="identifier">rhs_ut</span></code>
                     </p>
                   </td>
 <td>
@@ -2067,12 +2397,12 @@
 <tr>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">using_not_equal</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ <code class="computeroutput"><span class="identifier">using_multiply</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">Bool</span> <span class="keyword">operator</span><span class="special">!=(</span><span class="keyword">const</span>
+ <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">*(</span><span class="keyword">const</span>
                       <span class="identifier">NT</span><span class="special">&amp;</span>
                       <span class="identifier">rhs</span><span class="special">)</span>
                       <span class="keyword">const</span></code>
@@ -2080,7 +2410,7 @@
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">Bool</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">!=</span>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">*</span>
                       <span class="identifier">rhs_ut</span><span class="special">)</span></code>
                     </p>
                   </td>
@@ -2093,18 +2423,18 @@
 <tr>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">using_plus_assign</span></code>
+ <code class="computeroutput"><span class="identifier">using_multiply_assign</span></code>
                     </p>
                   </td>
 <td>
                     <p>
                       <code class="computeroutput"><span class="identifier">NT</span><span class="special">&amp;</span>
- <span class="keyword">operator</span><span class="special">+=(</span><span class="keyword">const</span> <span class="identifier">NT</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span></code>
+ <span class="keyword">operator</span><span class="special">*=(</span><span class="keyword">const</span> <span class="identifier">NT</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">this_ut</span> <span class="special">+=</span>
+ <code class="computeroutput"><span class="identifier">this_ut</span> <span class="special">*=</span>
                       <span class="identifier">rhs_ut</span></code>
                     </p>
                   </td>
@@ -2117,19 +2447,21 @@
 <tr>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">using_minus_assign</span></code>
+ <code class="computeroutput"><span class="identifier">using_divide</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">NT</span><span class="special">&amp;</span>
- <span class="keyword">operator</span><span class="special">-=(</span><span class="keyword">const</span> <span class="identifier">NT</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">/(</span><span class="keyword">const</span>
+ <span class="identifier">NT</span><span class="special">&amp;</span>
+ <span class="identifier">rhs</span><span class="special">)</span>
+ <span class="keyword">const</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">this_ut</span> <span class="special">-=</span>
- <span class="identifier">rhs_ut</span></code>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">/</span>
+ <span class="identifier">rhs_ut</span><span class="special">)</span></code>
                     </p>
                   </td>
 <td>
@@ -2141,18 +2473,18 @@
 <tr>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">using_multiply_assign</span></code>
+ <code class="computeroutput"><span class="identifier">using_divide_assign</span></code>
                     </p>
                   </td>
 <td>
                     <p>
                       <code class="computeroutput"><span class="identifier">NT</span><span class="special">&amp;</span>
- <span class="keyword">operator</span><span class="special">*=(</span><span class="keyword">const</span> <span class="identifier">NT</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span></code>
+ <span class="keyword">operator</span><span class="special">/=(</span><span class="keyword">const</span> <span class="identifier">NT</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">this_ut</span> <span class="special">*=</span>
+ <code class="computeroutput"><span class="identifier">this_ut</span> <span class="special">/=</span>
                       <span class="identifier">rhs_ut</span></code>
                     </p>
                   </td>
@@ -2165,19 +2497,21 @@
 <tr>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">using_divide_assign</span></code>
+ <code class="computeroutput"><span class="identifier">using_modulus</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">NT</span><span class="special">&amp;</span>
- <span class="keyword">operator</span><span class="special">/=(</span><span class="keyword">const</span> <span class="identifier">NT</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">%(</span><span class="keyword">const</span>
+ <span class="identifier">NT</span><span class="special">&amp;</span>
+ <span class="identifier">rhs</span><span class="special">)</span>
+ <span class="keyword">const</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">this_ut</span> <span class="special">/=</span>
- <span class="identifier">rhs_ut</span></code>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">%</span>
+ <span class="identifier">rhs_ut</span><span class="special">)</span></code>
                     </p>
                   </td>
 <td>
@@ -2213,133 +2547,147 @@
 <tr>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">using_bitwise_xor_assign</span></code>
+ <code class="computeroutput"><span class="identifier">using_unary_plus</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">NT</span><span class="special">&amp;</span>
- <span class="keyword">operator</span><span class="special">^=(</span><span class="keyword">const</span> <span class="identifier">NT</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">+()</span> <span class="keyword">const</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">this_ut</span> <span class="special">^=</span>
- <span class="identifier">rhs_ut</span></code>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">(+</span><span class="identifier">this_ut</span><span class="special">)</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- 13.5.2
+ 13.5.1
                     </p>
                   </td>
 </tr>
 <tr>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">using_bitwise_and_assign</span></code>
+ <code class="computeroutput"><span class="identifier">using_unary_minus</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">NT</span><span class="special">&amp;</span>
- <span class="keyword">operator</span><span class="special">&amp;=(</span><span class="keyword">const</span> <span class="identifier">NT</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">-()</span> <span class="keyword">const</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">this_ut</span> <span class="special">&amp;=</span>
- <span class="identifier">rhs_ut</span></code>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">(-</span><span class="identifier">this_ut</span><span class="special">)</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- 13.5.2
+ 13.5.1
                     </p>
                   </td>
 </tr>
 <tr>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">using_bitwise_or_assign</span></code>
+ <code class="computeroutput"><span class="identifier">using_pre_increment</span></code>
                     </p>
                   </td>
 <td>
                     <p>
                       <code class="computeroutput"><span class="identifier">NT</span><span class="special">&amp;</span>
- <span class="keyword">operator</span><span class="special">|=(</span><span class="keyword">const</span> <span class="identifier">NT</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span></code>
+ <span class="keyword">operator</span><span class="special">++()</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">this_ut</span> <span class="special">|=</span>
- <span class="identifier">rhs_ut</span></code>
+ <code class="computeroutput"><span class="special">++</span><span class="identifier">this_ut</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- 13.5.2
+ 13.5.1
                     </p>
                   </td>
 </tr>
 <tr>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">using_left_right_assign</span></code>
+ <code class="computeroutput"><span class="identifier">using_pre_decrement</span></code>
                     </p>
                   </td>
 <td>
                     <p>
                       <code class="computeroutput"><span class="identifier">NT</span><span class="special">&amp;</span>
- <span class="keyword">operator</span><span class="special">&lt;&lt;=(</span><span class="keyword">const</span> <span class="identifier">NT</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span></code>
+ <span class="keyword">operator</span><span class="special">--()</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">this_ut</span> <span class="special">&lt;&lt;=</span>
- <span class="identifier">rhs_ut</span></code>
+ <code class="computeroutput"><span class="special">--</span><span class="identifier">this_ut</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- 13.5.2
+ 13.5.1
                     </p>
                   </td>
 </tr>
 <tr>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">using_right_shift_assign</span></code>
+ <code class="computeroutput"><span class="identifier">using_post_increment</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">NT</span><span class="special">&amp;</span>
- <span class="keyword">operator</span><span class="special">&gt;&gt;=(</span><span class="keyword">const</span> <span class="identifier">NT</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">++(</span><span class="keyword">int</span><span class="special">)</span> <span class="keyword">const</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">this_ut</span> <span class="special">&gt;&gt;=</span>
- <span class="identifier">rhs_ut</span></code>
+ <code class="computeroutput"><span class="identifier">this_ut</span><span class="special">++</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- 13.5.2
+ 13.5.1
                     </p>
                   </td>
 </tr>
 <tr>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">using_plus</span></code>
+ <code class="computeroutput"><span class="identifier">using_post_decrement</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">--(</span><span class="keyword">int</span><span class="special">)</span> <span class="keyword">const</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">this_ut</span><span class="special">++</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 13.5.1
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_plus2</span><span class="special">&lt;</span><span class="identifier">NT2</span><span class="special">&gt;</span></code>
                     </p>
                   </td>
 <td>
                     <p>
                       <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">+(</span><span class="keyword">const</span>
- <span class="identifier">NT</span><span class="special">&amp;</span>
+ <span class="identifier">NT2</span><span class="special">&amp;</span>
                       <span class="identifier">rhs</span><span class="special">)</span>
                       <span class="keyword">const</span></code>
                     </p>
@@ -2359,21 +2707,19 @@
 <tr>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">using_minus</span></code>
+ <code class="computeroutput"><span class="identifier">using_plus_assign2</span><span class="special">&lt;</span><span class="identifier">NT2</span><span class="special">&gt;</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">-(</span><span class="keyword">const</span>
- <span class="identifier">NT</span><span class="special">&amp;</span>
- <span class="identifier">rhs</span><span class="special">)</span>
- <span class="keyword">const</span></code>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">&amp;</span>
+ <span class="keyword">operator</span><span class="special">+=(</span><span class="keyword">const</span> <span class="identifier">NT2</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">NT</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">-</span>
- <span class="identifier">rhs_ut</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">this_ut</span> <span class="special">+=</span>
+ <span class="identifier">rhs_ut</span></code>
                     </p>
                   </td>
 <td>
@@ -2385,20 +2731,20 @@
 <tr>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">using_multiply</span></code>
+ <code class="computeroutput"><span class="identifier">using_minus2</span><span class="special">&lt;</span><span class="identifier">NT2</span><span class="special">&gt;</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">*(</span><span class="keyword">const</span>
- <span class="identifier">NT</span><span class="special">&amp;</span>
+ <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">-(</span><span class="keyword">const</span>
+ <span class="identifier">NT2</span><span class="special">&amp;</span>
                       <span class="identifier">rhs</span><span class="special">)</span>
                       <span class="keyword">const</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">NT</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">*</span>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">-</span>
                       <span class="identifier">rhs_ut</span><span class="special">)</span></code>
                     </p>
                   </td>
@@ -2411,21 +2757,19 @@
 <tr>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">using_divide</span></code>
+ <code class="computeroutput"><span class="identifier">using_minus_assign2</span><span class="special">&lt;</span><span class="identifier">NT2</span><span class="special">&gt;</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">/(</span><span class="keyword">const</span>
- <span class="identifier">NT</span><span class="special">&amp;</span>
- <span class="identifier">rhs</span><span class="special">)</span>
- <span class="keyword">const</span></code>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">&amp;</span>
+ <span class="keyword">operator</span><span class="special">-=(</span><span class="keyword">const</span> <span class="identifier">NT2</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">NT</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">/</span>
- <span class="identifier">rhs_ut</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">this_ut</span> <span class="special">-=</span>
+ <span class="identifier">rhs_ut</span></code>
                     </p>
                   </td>
 <td>
@@ -2437,20 +2781,20 @@
 <tr>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">using_modulus</span></code>
+ <code class="computeroutput"><span class="identifier">using_multiply2</span><span class="special">&lt;</span><span class="identifier">NT2</span><span class="special">&gt;</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">%(</span><span class="keyword">const</span>
- <span class="identifier">NT</span><span class="special">&amp;</span>
+ <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">*(</span><span class="keyword">const</span>
+ <span class="identifier">NT2</span><span class="special">&amp;</span>
                       <span class="identifier">rhs</span><span class="special">)</span>
                       <span class="keyword">const</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">NT</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">%</span>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">*</span>
                       <span class="identifier">rhs_ut</span><span class="special">)</span></code>
                     </p>
                   </td>
@@ -2463,21 +2807,19 @@
 <tr>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">using_bitwise_xor</span></code>
+ <code class="computeroutput"><span class="identifier">using_multiply_assign2</span><span class="special">&lt;</span><span class="identifier">NT2</span><span class="special">&gt;</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">^(</span><span class="keyword">const</span>
- <span class="identifier">NT</span><span class="special">&amp;</span>
- <span class="identifier">rhs</span><span class="special">)</span>
- <span class="keyword">const</span></code>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">&amp;</span>
+ <span class="keyword">operator</span><span class="special">*=(</span><span class="keyword">const</span> <span class="identifier">NT2</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">NT</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">^</span>
- <span class="identifier">rhs_ut</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">this_ut</span> <span class="special">*=</span>
+ <span class="identifier">rhs_ut</span></code>
                     </p>
                   </td>
 <td>
@@ -2489,20 +2831,20 @@
 <tr>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">using_bitwise_or</span></code>
+ <code class="computeroutput"><span class="identifier">using_divide2</span><span class="special">&lt;</span><span class="identifier">NT2</span><span class="special">&gt;</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">|(</span><span class="keyword">const</span>
- <span class="identifier">NT</span><span class="special">&amp;</span>
+ <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">/(</span><span class="keyword">const</span>
+ <span class="identifier">NT2</span><span class="special">&amp;</span>
                       <span class="identifier">rhs</span><span class="special">)</span>
                       <span class="keyword">const</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">NT</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">|</span>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">/</span>
                       <span class="identifier">rhs_ut</span><span class="special">)</span></code>
                     </p>
                   </td>
@@ -2515,21 +2857,19 @@
 <tr>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">using_bitwise_and</span></code>
+ <code class="computeroutput"><span class="identifier">using_divide_assign2</span><span class="special">&lt;</span><span class="identifier">NT2</span><span class="special">&gt;</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">&amp;(</span><span class="keyword">const</span>
- <span class="identifier">NT</span><span class="special">&amp;</span>
- <span class="identifier">rhs</span><span class="special">)</span>
- <span class="keyword">const</span></code>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">&amp;</span>
+ <span class="keyword">operator</span><span class="special">/=(</span><span class="keyword">const</span> <span class="identifier">NT2</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">NT</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">&amp;</span>
- <span class="identifier">rhs_ut</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">this_ut</span> <span class="special">/=</span>
+ <span class="identifier">rhs_ut</span></code>
                     </p>
                   </td>
 <td>
@@ -2541,20 +2881,20 @@
 <tr>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">using_left_shift1</span></code>
+ <code class="computeroutput"><span class="identifier">using_modulus2</span><span class="special">&lt;</span><span class="identifier">NT2</span><span class="special">&gt;</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">&lt;&lt;(</span><span class="keyword">const</span>
- <span class="identifier">NT</span><span class="special">&amp;</span>
+ <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">%(</span><span class="keyword">const</span>
+ <span class="identifier">NT2</span><span class="special">&amp;</span>
                       <span class="identifier">rhs</span><span class="special">)</span>
                       <span class="keyword">const</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">NT</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">&lt;&lt;</span>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">%</span>
                       <span class="identifier">rhs_ut</span><span class="special">)</span></code>
                     </p>
                   </td>
@@ -2567,21 +2907,19 @@
 <tr>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">using_right_shift1</span></code>
+ <code class="computeroutput"><span class="identifier">using_modulus_assign2</span><span class="special">&lt;</span><span class="identifier">NT2</span><span class="special">&gt;</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">&gt;&gt;(</span><span class="keyword">const</span>
- <span class="identifier">NT</span><span class="special">&amp;</span>
- <span class="identifier">rhs</span><span class="special">)</span>
- <span class="keyword">const</span></code>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">&amp;</span>
+ <span class="keyword">operator</span><span class="special">%=(</span><span class="keyword">const</span> <span class="identifier">NT2</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span></code>
                     </p>
                   </td>
 <td>
                     <p>
- <code class="computeroutput"><span class="identifier">NT</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">&gt;&gt;</span>
- <span class="identifier">rhs_ut</span><span class="special">)</span></code>
+ <code class="computeroutput"><span class="identifier">this_ut</span> <span class="special">%=</span>
+ <span class="identifier">rhs_ut</span></code>
                     </p>
                   </td>
 <td>
@@ -2591,25 +2929,11 @@
                   </td>
 </tr>
 </tbody>
-</table></div>
-</div>
+</table>
 </div>
-<div class="section" lang="en">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="boost.opaque.reference.meta_mixins.hiding_operators_hpp"></a><a href="index.html#boost.opaque.reference.meta_mixins.hiding_operators_hpp" title="
- Header &lt;boost/opaque/metamixin/hiding_operators.hpp&gt;">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">metamixin</span><span class="special">/</span><span class="identifier">hiding_operators</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
-</h4></div></div></div>
-<p>
- This file includes meta-mixins that are used to hide operator overloads
- that have been defined by a base class for each one of the C++ overloadable
- operators.
- </p>
-<p>
- These meta-mixins have names that follows the naming used in Boost.ConceptsTraits,
- but prefixed by <code class="computeroutput"><span class="identifier">hiding_</span></code>.
- </p>
-<div class="informaltable"><table class="table">
+<div class="table">
+<a name="boost.opaque.reference.meta_mixins.using_operators_hpp.arithmetic_operators.bitwise_operators"></a><p class="title"><b>Table&#160;3.&#160;Bitwise operators</b></p>
+<table class="table" summary="Bitwise operators">
 <colgroup>
 <col>
 <col>
@@ -2618,113 +2942,2272 @@
 </colgroup>
 <thead><tr>
 <th>
- <p>
- Meta-Mixin
- </p>
- </th>
+ <p>
+ Meta-Mixin
+ </p>
+ </th>
 <th>
- <p>
- Hidden Operation
- </p>
- </th>
+ <p>
+ Supplied Operation
+ </p>
+ </th>
 <th>
- <p>
- Requirements
- </p>
- </th>
+ <p>
+ Requirements
+ </p>
+ </th>
 <th>
- <p>
- Ref
- </p>
- </th>
+ <p>
+ Ref
+ </p>
+ </th>
 </tr></thead>
 <tbody>
 <tr>
 <td>
- <p>
- <code class="computeroutput"><span class="identifier">hiding_assign</span></code>
- </p>
- </td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_bitwise_not</span></code>
+ </p>
+ </td>
 <td>
- <p>
- <code class="computeroutput"><span class="identifier">NT</span><span class="special">&amp;</span>
- <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">NT</span> <span class="keyword">const</span><span class="special">&amp;)</span></code>
- </p>
- </td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">~()</span> <span class="keyword">const</span></code>
+ </p>
+ </td>
 <td>
- <p>
- None
- </p>
- </td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">(~</span><span class="identifier">this_ut</span><span class="special">)</span></code>
+ </p>
+ </td>
 <td>
- <p>
- 13.5.3
- </p>
- </td>
+ <p>
+ 13.5.1
+ </p>
+ </td>
 </tr>
 <tr>
 <td>
- <p>
- <code class="computeroutput"><span class="identifier">hiding_copy</span></code>
- </p>
- </td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_bitwise_xor_assign</span></code>
+ </p>
+ </td>
 <td>
- <p>
- <code class="computeroutput"><span class="identifier">NT</span><span class="special">(</span><span class="identifier">NT</span> <span class="keyword">const</span><span class="special">&amp;)</span></code>
- </p>
- </td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">&amp;</span>
+ <span class="keyword">operator</span><span class="special">^=(</span><span class="keyword">const</span> <span class="identifier">NT</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span></code>
+ </p>
+ </td>
 <td>
- <p>
- None
- </p>
- </td>
+ <p>
+ <code class="computeroutput"><span class="identifier">this_ut</span> <span class="special">^=</span>
+ <span class="identifier">rhs_ut</span></code>
+ </p>
+ </td>
 <td>
- <p>
- 13.5.3
- </p>
- </td>
+ <p>
+ 13.5.2
+ </p>
+ </td>
 </tr>
-</tbody>
-</table></div>
-</div>
-<div class="section" lang="en">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="boost.opaque.reference.meta_mixins.using_combined_operators_hpp"></a><a href="index.html#boost.opaque.reference.meta_mixins.using_combined_operators_hpp" title="
- Header &lt;boost/opaque/metamixin/using_combined_operators.hpp&gt;">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">metamixin</span><span class="special">/</span><span class="identifier">using_combined_operators</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
-</h4></div></div></div>
-<p>
- This file includes meta-mixins combining several operators.
- </p>
-<p>
- These meta-mixins have names that follows the naming used in Boost.Operators,
- but prefixed by <code class="computeroutput"><span class="identifier">using_</span></code>.
- </p>
-<p>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_bitwise_and_assign</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">&amp;</span>
+ <span class="keyword">operator</span><span class="special">&amp;=(</span><span class="keyword">const</span> <span class="identifier">NT</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">this_ut</span> <span class="special">&amp;=</span>
+ <span class="identifier">rhs_ut</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 13.5.2
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_bitwise_or_assign</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">&amp;</span>
+ <span class="keyword">operator</span><span class="special">|=(</span><span class="keyword">const</span> <span class="identifier">NT</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">this_ut</span> <span class="special">|=</span>
+ <span class="identifier">rhs_ut</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 13.5.2
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_left_right_assign</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">&amp;</span>
+ <span class="keyword">operator</span><span class="special">&lt;&lt;=(</span><span class="keyword">const</span> <span class="identifier">NT</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">this_ut</span> <span class="special">&lt;&lt;=</span>
+ <span class="identifier">rhs_ut</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 13.5.2
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_right_shift_assign</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">&amp;</span>
+ <span class="keyword">operator</span><span class="special">&gt;&gt;=(</span><span class="keyword">const</span> <span class="identifier">NT</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">this_ut</span> <span class="special">&gt;&gt;=</span>
+ <span class="identifier">rhs_ut</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 13.5.2
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_bitwise_xor</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">^(</span><span class="keyword">const</span>
+ <span class="identifier">NT</span><span class="special">&amp;</span>
+ <span class="identifier">rhs</span><span class="special">)</span>
+ <span class="keyword">const</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">^</span>
+ <span class="identifier">rhs_ut</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 13.5.2
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_bitwise_or</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">|(</span><span class="keyword">const</span>
+ <span class="identifier">NT</span><span class="special">&amp;</span>
+ <span class="identifier">rhs</span><span class="special">)</span>
+ <span class="keyword">const</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">|</span>
+ <span class="identifier">rhs_ut</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 13.5.2
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_bitwise_and</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">&amp;(</span><span class="keyword">const</span>
+ <span class="identifier">NT</span><span class="special">&amp;</span>
+ <span class="identifier">rhs</span><span class="special">)</span>
+ <span class="keyword">const</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">&amp;</span>
+ <span class="identifier">rhs_ut</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 13.5.2
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_left_shift1</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">&lt;&lt;(</span><span class="keyword">const</span>
+ <span class="identifier">NT</span><span class="special">&amp;</span>
+ <span class="identifier">rhs</span><span class="special">)</span>
+ <span class="keyword">const</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">&lt;&lt;</span>
+ <span class="identifier">rhs_ut</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 13.5.2
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_right_shift1</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">&gt;&gt;(</span><span class="keyword">const</span>
+ <span class="identifier">NT</span><span class="special">&amp;</span>
+ <span class="identifier">rhs</span><span class="special">)</span>
+ <span class="keyword">const</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">&gt;&gt;</span>
+ <span class="identifier">rhs_ut</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 13.5.2
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_bitwise_xor2</span><span class="special">&lt;</span><span class="identifier">NT2</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">^(</span><span class="keyword">const</span>
+ <span class="identifier">NT2</span><span class="special">&amp;</span>
+ <span class="identifier">rhs</span><span class="special">)</span>
+ <span class="keyword">const</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">^</span>
+ <span class="identifier">rhs_ut</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 13.5.2
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_bitwise_xor_assign2</span><span class="special">&lt;</span><span class="identifier">NT2</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">&amp;</span>
+ <span class="keyword">operator</span><span class="special">^=(</span><span class="keyword">const</span> <span class="identifier">NT2</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">this_ut</span> <span class="special">^=</span>
+ <span class="identifier">rhs_ut</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 13.5.2
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_bitwise_or2</span><span class="special">&lt;</span><span class="identifier">NT2</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">|(</span><span class="keyword">const</span>
+ <span class="identifier">NT2</span><span class="special">&amp;</span>
+ <span class="identifier">rhs</span><span class="special">)</span>
+ <span class="keyword">const</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">|</span>
+ <span class="identifier">rhs_ut</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 13.5.2
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_bitwise_and2</span><span class="special">&lt;</span><span class="identifier">NT2</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">&amp;(</span><span class="keyword">const</span>
+ <span class="identifier">NT2</span><span class="special">&amp;</span>
+ <span class="identifier">rhs</span><span class="special">)</span>
+ <span class="keyword">const</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">&amp;</span>
+ <span class="identifier">rhs_ut</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 13.5.2
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_bitwise_and_assign2</span><span class="special">&lt;</span><span class="identifier">NT2</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">&amp;</span>
+ <span class="keyword">operator</span><span class="special">&amp;=(</span><span class="keyword">const</span> <span class="identifier">NT2</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">this_ut</span> <span class="special">&amp;=</span>
+ <span class="identifier">rhs_ut</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 13.5.2
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_bitwise_or_assign2</span><span class="special">&lt;</span><span class="identifier">NT2</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">&amp;</span>
+ <span class="keyword">operator</span><span class="special">|=(</span><span class="keyword">const</span> <span class="identifier">NT2</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">this_ut</span> <span class="special">|=</span>
+ <span class="identifier">rhs_ut</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 13.5.2
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_left_shift2</span><span class="special">&lt;</span><span class="identifier">NT2</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">&lt;&lt;(</span><span class="keyword">const</span>
+ <span class="identifier">NT2</span><span class="special">&amp;</span>
+ <span class="identifier">rhs</span><span class="special">)</span>
+ <span class="keyword">const</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">&lt;&lt;</span>
+ <span class="identifier">rhs_ut</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 13.5.2
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_left_right_assign2</span><span class="special">&lt;</span><span class="identifier">NT2</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">&amp;</span>
+ <span class="keyword">operator</span><span class="special">&lt;&lt;=(</span><span class="keyword">const</span> <span class="identifier">NT2</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">this_ut</span> <span class="special">&lt;&lt;=</span>
+ <span class="identifier">rhs_ut</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 13.5.2
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_right_shift2</span><span class="special">&lt;</span><span class="identifier">NT2</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">&gt;&gt;(</span><span class="keyword">const</span>
+ <span class="identifier">NT2</span><span class="special">&amp;</span>
+ <span class="identifier">rhs</span><span class="special">)</span>
+ <span class="keyword">const</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">&gt;&gt;</span>
+ <span class="identifier">rhs_ut</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 13.5.2
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_right_shift_assign2</span><span class="special">&lt;</span><span class="identifier">NT2</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">&amp;</span>
+ <span class="keyword">operator</span><span class="special">&gt;&gt;=(</span><span class="keyword">const</span> <span class="identifier">NT2</span><span class="special">&amp;</span> <span class="identifier">rhs</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">this_ut</span> <span class="special">&gt;&gt;=</span>
+ <span class="identifier">rhs_ut</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 13.5.2
+ </p>
+ </td>
+</tr>
+</tbody>
+</table>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost.opaque.reference.meta_mixins.using_operators_hpp.logical_operators"></a><a href="index.html#boost.opaque.reference.meta_mixins.using_operators_hpp.logical_operators" title="Logical
+ Operators">Logical
+ Operators</a>
+</h5></div></div></div>
+<div class="table">
+<a name="boost.opaque.reference.meta_mixins.using_operators_hpp.logical_operators.logical_operators"></a><p class="title"><b>Table&#160;4.&#160;Logical operators</b></p>
+<table class="table" summary="Logical operators">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Meta-Mixin
+ </p>
+ </th>
+<th>
+ <p>
+ Supplied Operation
+ </p>
+ </th>
+<th>
+ <p>
+ Requirements
+ </p>
+ </th>
+<th>
+ <p>
+ Ref
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_logical_not</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">Bool</span> <span class="keyword">operator</span><span class="special">!()</span> <span class="keyword">const</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">Bool</span><span class="special">(!</span><span class="identifier">this_ut</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 13.5.1
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_logical_and</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">Bool</span> <span class="keyword">operator</span><span class="special">&amp;&amp;(</span><span class="keyword">const</span>
+ <span class="identifier">NT</span><span class="special">&amp;</span>
+ <span class="identifier">rhs</span><span class="special">)</span>
+ <span class="keyword">const</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">Bool</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">&amp;&amp;</span>
+ <span class="identifier">rhs_ut</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 13.5.2
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_logical_or</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">Bool</span> <span class="keyword">operator</span><span class="special">||(</span><span class="keyword">const</span>
+ <span class="identifier">NT</span><span class="special">&amp;</span>
+ <span class="identifier">rhs</span><span class="special">)</span>
+ <span class="keyword">const</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">Bool</span><span class="special">(</span><span class="identifier">this_ut</span> <span class="special">||</span>
+ <span class="identifier">rhs_ut</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 13.5.2
+ </p>
+ </td>
+</tr>
+</tbody>
+</table>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost.opaque.reference.meta_mixins.using_operators_hpp.conversion_operators"></a><a href="index.html#boost.opaque.reference.meta_mixins.using_operators_hpp.conversion_operators" title="Conversion
+ Operators">Conversion
+ Operators</a>
+</h5></div></div></div>
+<div class="table">
+<a name="boost.opaque.reference.meta_mixins.using_operators_hpp.conversion_operators.conversion_operators"></a><p class="title"><b>Table&#160;5.&#160;Conversion Operators</b></p>
+<table class="table" summary="Conversion Operators">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Meta-Mixin
+ </p>
+ </th>
+<th>
+ <p>
+ Supplied Operation
+ </p>
+ </th>
+<th>
+ <p>
+ Requirements
+ </p>
+ </th>
+<th>
+ <p>
+ Ref
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_underlying_conversion</span><span class="special">&lt;</span><span class="identifier">UT</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">operator</span> <span class="identifier">UT</span><span class="special">()</span> <span class="keyword">const</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ None
+ </p>
+ </td>
+<td>
+ <p>
+ 12.3.2
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_conversion_to</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="keyword">operator</span> <span class="identifier">T</span><span class="special">()</span> <span class="keyword">const</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">T</span><span class="special">(</span><span class="identifier">ut</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 12.3.2
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_safe_bool_conversion</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">operator</span> <span class="identifier">unspecified_bool_type</span><span class="special">()</span> <span class="keyword">const</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">ut</span><span class="special">?</span><span class="keyword">true</span><span class="special">:</span><span class="keyword">false</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 12.3.2
+ </p>
+ </td>
+</tr>
+</tbody>
+</table>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost.opaque.reference.meta_mixins.using_operators_hpp.dereference_operators"></a><a href="index.html#boost.opaque.reference.meta_mixins.using_operators_hpp.dereference_operators" title="Dereference
+ Operators">Dereference
+ Operators</a>
+</h5></div></div></div>
+<div class="table">
+<a name="boost.opaque.reference.meta_mixins.using_operators_hpp.dereference_operators.dereference_operators"></a><p class="title"><b>Table&#160;6.&#160;Dereference Operators</b></p>
+<table class="table" summary="Dereference Operators">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Meta-Mixin
+ </p>
+ </th>
+<th>
+ <p>
+ Supplied Operation
+ </p>
+ </th>
+<th>
+ <p>
+ Requirements
+ </p>
+ </th>
+<th>
+ <p>
+ Ref
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_address_of</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">&amp;</span>
+ <span class="keyword">operator</span><span class="special">&amp;()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ ??
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_address_of2</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">A</span> <span class="keyword">operator</span><span class="special">&amp;()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ ??
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_derreference</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">&amp;</span>
+ <span class="keyword">operator</span><span class="special">*()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ ??
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_derreference</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">R</span> <span class="keyword">operator</span><span class="special">*()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ ??
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_member_access</span><span class="special">&lt;</span><span class="identifier">P</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">P</span> <span class="keyword">operator</span><span class="special">-&gt;()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ ??
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_subscript</span><span class="special">&lt;</span><span class="identifier">D</span><span class="special">,</span><span class="identifier">T</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">T</span> <span class="keyword">operator</span><span class="special">[](</span><span class="identifier">D</span><span class="special">)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ ??
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+</tbody>
+</table>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost.opaque.reference.meta_mixins.using_operators_hpp.other_operators"></a><a href="index.html#boost.opaque.reference.meta_mixins.using_operators_hpp.other_operators" title="Other
+ Operators">Other
+ Operators</a>
+</h5></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Meta-Mixin
+ </p>
+ </th>
+<th>
+ <p>
+ Supplied Operation
+ </p>
+ </th>
+<th>
+ <p>
+ Requirements
+ </p>
+ </th>
+<th>
+ <p>
+ Ref
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_comma</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span> <span class="keyword">operator</span><span class="special">,()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ ??
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_function_call</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">operator</span><span class="special">()()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ ??
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_pointer_to_member</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="keyword">operator</span><span class="special">-&gt;*()</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ ??
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost.opaque.reference.meta_mixins.hiding_operators_hpp"></a><a href="index.html#boost.opaque.reference.meta_mixins.hiding_operators_hpp" title="
+ Header &lt;boost/opaque/meta_mixin/hiding_operators.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">meta_mixin</span><span class="special">/</span><span class="identifier">hiding_operators</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ This file includes meta-mixins that are used to hide operator overloads
+ that have been defined by a base class for each one of the C++ overloadable
+ operators.
+ </p>
+<p>
+ These meta-mixins have names that follows the naming used in Boost.ConceptsTraits,
+ but prefixed by <code class="computeroutput"><span class="identifier">hiding_</span></code>.
+ </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Meta-Mixin
+ </p>
+ </th>
+<th>
+ <p>
+ Hidden Operation
+ </p>
+ </th>
+<th>
+ <p>
+ Requirements
+ </p>
+ </th>
+<th>
+ <p>
+ Ref
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">hiding_assignment</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">&amp;</span>
+ <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">NT</span> <span class="keyword">const</span><span class="special">&amp;)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ None
+ </p>
+ </td>
+<td>
+ <p>
+ 13.5.3
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">hiding_copy_constructor</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">NT</span><span class="special">(</span><span class="identifier">NT</span> <span class="keyword">const</span><span class="special">&amp;)</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ None
+ </p>
+ </td>
+<td>
+ <p>
+ 13.5.3
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost.opaque.reference.meta_mixins.using_combined_operators_hpp"></a><a href="index.html#boost.opaque.reference.meta_mixins.using_combined_operators_hpp" title="
+ Header &lt;boost/opaque/meta_mixin/using_combined_operators.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">meta_mixin</span><span class="special">/</span><span class="identifier">using_combined_operators</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ This file includes meta-mixins combining several operators.
+ </p>
+<p>
+ These meta-mixins have names that follows the naming used in Boost.Operators,
+ but prefixed by <code class="computeroutput"><span class="identifier">using_</span></code>.
+ </p>
+<p>
           The composite operator templates only list what other templates they use.
           The supplied operations and requirements of the composite operator templates
           can be inferred from the operations and requirements of the listed components.
         </p>
-<div class="informaltable"><table class="table">
+<p>
+ Grouped Arithmetic Operators
+ </p>
+<p>
+ The following meta-mixins provide common groups of related meta-mixins.
+ For example, since a type which is addable is usually also subractable,
+ the additive template provides the combined meta-mixins of both.
+ </p>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Meta-Mixin
+ </p>
+ </th>
+<th>
+ <p>
+ Meta-Mixin Sequence
+ </p>
+ </th>
+<th>
+ <p>
+ Ref
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_equality_comparable1</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_equal</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>,
+ <br> <code class="computeroutput"><span class="identifier">using_not_equal</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 20.1.1
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_less_than_comparable1</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_less_than</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code> <br> <code class="computeroutput"><span class="identifier">using_less_than_equal</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code> <br> <code class="computeroutput"><span class="identifier">using_greater_than_equal</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code> <br> <code class="computeroutput"><span class="identifier">using_greater_than</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 20.1.2
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_partially_ordered1</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_less_than</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code> <br> <code class="computeroutput"><span class="identifier">using_less_than_equal</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code> <br> <code class="computeroutput"><span class="identifier">using_greater_than_equal</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code> <br> <code class="computeroutput"><span class="identifier">using_greater_than</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ 20.1.2
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_addable1</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_plus_assign</span></code>
+ <br> <code class="computeroutput"><span class="identifier">using_plus</span></code>
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_subtractable1</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_minus_assign</span></code>
+ <br> <code class="computeroutput"><span class="identifier">using_minus</span></code>
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_multipliable1</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_multiply_assign</span></code>
+ <br> <code class="computeroutput"><span class="identifier">using_multiply</span></code>
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_dividable1</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_divide_assign</span></code>
+ <br> <code class="computeroutput"><span class="identifier">using_divide</span></code>
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_modable1</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_modulus_assign</span></code>
+ <br> <code class="computeroutput"><span class="identifier">using_modulus</span></code>
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_bitwise_xorable1</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_bitwise_xor_assign</span></code>
+ <br> <code class="computeroutput"><span class="identifier">using_bitwise_xor</span></code>
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_bitwise_orable1</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_bitwise_or_assign</span></code>
+ <br> <code class="computeroutput"><span class="identifier">using_bitwise_or</span></code>
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_bitwise_andable1</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_bitwise_and_assign</span></code>
+ <br> <code class="computeroutput"><span class="identifier">using_bitwise_and</span></code>
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_left_shiftable1</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_left_right_assign</span></code>
+ <br> <code class="computeroutput"><span class="identifier">using_left_shift1</span></code>
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_right_shiftable1</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_right_shift_assign</span></code>
+ <br> <code class="computeroutput"><span class="identifier">using_right_shift1</span></code>
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_incrementable</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_pre_increment</span><span class="special">&gt;</span></code> <br> <code class="computeroutput"><span class="identifier">using_post_increment</span></code>
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_decrementable</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_pre_decrement</span><span class="special">&gt;</span></code> <br> <code class="computeroutput"><span class="identifier">using_post_decrement</span></code>
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Meta-Mixin
+ </p>
+ </th>
+<th>
+ <p>
+ Meta-Mixin Sequence
+ </p>
+ </th>
+<th>
+ <p>
+ Ref
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_totally_ordered1</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_equality_comparable1</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code> <br> <code class="computeroutput"><span class="identifier">using_less_than_comparable1</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_additive1</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_addable1</span></code>
+ <br> <code class="computeroutput"><span class="identifier">using_subtractable1</span></code>
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_multiplicative1</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_multipliable1</span></code>
+ <br> <code class="computeroutput"><span class="identifier">using_dividable1</span></code>
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">integer_multiplicative1</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_multiplicative1</span></code>
+ <br> <code class="computeroutput"><span class="identifier">using_modable1</span></code>
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_arithmetic1</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_additive1</span></code>
+ <br> <code class="computeroutput"><span class="identifier">using_multiplicative1</span></code>
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_integer_arithmetic1</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_additive1</span></code>
+ <br> <code class="computeroutput"><span class="identifier">integer_multiplicative1</span></code>
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_bitwise1</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_bitwise_xorable1</span></code>
+ <br> <code class="computeroutput"><span class="identifier">using_bitwise_orable1</span></code>
+ <br> <code class="computeroutput"><span class="identifier">using_bitwise_andable1</span></code>
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_unit_steppable</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_incrementable</span></code>
+ <br> <code class="computeroutput"><span class="identifier">using_decrementable</span></code>
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_shiftable1</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_left_shiftable1</span></code>
+ <br> <code class="computeroutput"><span class="identifier">using_right_shiftable1</span></code>
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_ring_operators1</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_additive1</span></code>
+ <br> <code class="computeroutput"><span class="identifier">using_multipliable1</span></code>
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_ordered_ring_operators1</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_ring_operators1</span></code>
+ <br> <code class="computeroutput"><span class="identifier">using_totally_ordered1</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_field_operators1</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_ring_operators1</span></code>
+ <br> <code class="computeroutput"><span class="identifier">using_dividable1</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_ordered_field_operators1</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">using_field_operators1</span></code>
+ <br> <code class="computeroutput"><span class="identifier">using_totally_ordered1</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ </p>
+ </td>
+<td>
+ </td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost.opaque.reference.meta_mixins.hiding_combined_operators_hpp"></a><a href="index.html#boost.opaque.reference.meta_mixins.hiding_combined_operators_hpp" title="
+ Header &lt;boost/opaque/meta_mixin/hiding_combined_operators.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">meta_mixin</span><span class="special">/</span><span class="identifier">hiding_combined_operators</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<p>
+ This file includes meta-mixins combining several hiding meta-mixins that
+ are used to hide operator overloads that have been defined by a base clas.
+ </p>
+<p>
+ These meta-mixins have names that follows the naming used in Boost.Operators,
+ but prefixed by <code class="computeroutput"><span class="identifier">hiding_</span></code>.
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost.opaque.reference.meta_mixins.transitive_substituable_hpp"></a><a href="index.html#boost.opaque.reference.meta_mixins.transitive_substituable_hpp" title="
+ Header &lt;boost/opaque/meta_mixin/transitive_substituable.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">meta_mixin</span><span class="special">/</span><span class="identifier">transitive_substituable</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<div class="toc"><dl><dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.transitive_substituable_hpp.transitive_substituable">
+ Class Template <code class="computeroutput"><span class="identifier">transitive_substituable</span><span class="special">&lt;&gt;</span></code></a></span></dt></dl></div>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">BaseClass</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">UT</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">transitive_substituable</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost.opaque.reference.meta_mixins.transitive_substituable_hpp.transitive_substituable"></a><a href="index.html#boost.opaque.reference.meta_mixins.transitive_substituable_hpp.transitive_substituable" title="
+ Class Template transitive_substituable&lt;&gt;">
+ Class Template <code class="computeroutput"><span class="identifier">transitive_substituable</span><span class="special">&lt;&gt;</span></code></a>
+</h5></div></div></div>
+<p>
+ This meta-mixin provides the Final class implicit conversions for all
+ the underlying types hierarchy.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">BaseClass</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">UT</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">transitive_substituable</span><span class="special">;</span>
+</pre>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost.opaque.reference.meta_mixins.transitive_explicit_substituable_hpp"></a><a href="index.html#boost.opaque.reference.meta_mixins.transitive_explicit_substituable_hpp" title="
+ Header &lt;boost/opaque/meta_mixin/transitive_explicit_substituable.hpp&gt;">
+ Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">meta_mixin</span><span class="special">/</span><span class="identifier">transitive_explicit_substituable</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
+</h4></div></div></div>
+<div class="toc"><dl><dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.transitive_explicit_substituable_hpp.transitive_explicit_substituable">
+ Class Template <code class="computeroutput"><span class="identifier">transitive_explicit_substituable</span><span class="special">&lt;&gt;</span></code></a></span></dt></dl></div>
+<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
+ <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">BaseClass</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">UT</span><span class="special">&gt;</span>
+ <span class="keyword">struct</span> <span class="identifier">transitive_explicit_substituable</span><span class="special">;</span>
+<span class="special">}</span>
+</pre>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h5 class="title">
+<a name="boost.opaque.reference.meta_mixins.transitive_explicit_substituable_hpp.transitive_explicit_substituable"></a><a href="index.html#boost.opaque.reference.meta_mixins.transitive_explicit_substituable_hpp.transitive_explicit_substituable" title="
+ Class Template transitive_explicit_substituable&lt;&gt;">
+ Class Template <code class="computeroutput"><span class="identifier">transitive_explicit_substituable</span><span class="special">&lt;&gt;</span></code></a>
+</h5></div></div></div>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">BaseClass</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">UT</span><span class="special">&gt;</span>
+<span class="keyword">struct</span> <span class="identifier">transitive_explicit_substituable</span><span class="special">;</span>
+</pre>
+<p>
+ This meta-mixin provides the Final class explicit conversions for all
+ the underlying types hierarchy (when the compiler supports explicit conversion
+ operators). For portability purposed the library provide as workarround
+ a convert_to non member function.
+ </p>
+</div>
+</div>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h2 class="title" style="clear: both">
+<a name="boost.opaque.appendices"></a>Appendices
+</h2></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section"> Appendix A: History</span></dt>
+<dd><dl><dt><span class="section">Version 0.1.0, October 18, 2010 </span></dt></dl></dd>
+<dt><span class="section"><a href="index.html#boost.opaque.appendices.rationale"> Appendix B: Design
+ Rationale</a></span></dt>
+<dt><span class="section"><a href="index.html#boost.opaque.appendices.implementation"> Appendix C:
+ Implementation Notes</a></span></dt>
+<dt><span class="section"><a href="index.html#boost.opaque.appendices.acknowledgements"> Appendix D:
+ Acknowledgements</a></span></dt>
+<dt><span class="section"><a href="index.html#boost.opaque.appendices.appendix_e__tests">Appendix E:
+ Tests</a></span></dt>
+<dd><dl>
+<dt><span class="section">new_class</span></dt>
+<dt><span class="section">new_type</span></dt>
+<dt><span class="section">public_opaque_class</span></dt>
+</dl></dd>
+<dt><span class="section"><a href="index.html#boost.opaque.appendices.appendix_f__tickets">Appendix
+ F: Tickets</a></span></dt>
+<dt><span class="section"> Appendix F: Future plans</span></dt>
+</dl></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="boost.opaque.appendices.history"></a> Appendix A: History
+</h3></div></div></div>
+<div class="toc"><dl><dt><span class="section">Version 0.1.0, October 18, 2010 </span></dt></dl></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost.opaque.appendices.history.__version_0_1_0__october_18__2010__"></a>Version 0.1.0, October 18, 2010
+</h4></div></div></div>
+<p>
+ <span class="bold"><strong>Features:</strong></span>
+ </p>
+<div class="itemizedlist"><ul type="disc"><li>
+ a
+ </li></ul></div>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="boost.opaque.appendices.rationale"></a><a href="index.html#boost.opaque.appendices.rationale" title=" Appendix B: Design
+ Rationale"> Appendix B: Design
+ Rationale</a>
+</h3></div></div></div>
+<a name="boost.opaque.appendices.rationale.lala"></a><h4>
+<a name="id5018428"></a>
+ lala
+ </h4>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="boost.opaque.appendices.implementation"></a><a href="index.html#boost.opaque.appendices.implementation" title=" Appendix C:
+ Implementation Notes"> Appendix C:
+ Implementation Notes</a>
+</h3></div></div></div>
+<a name="boost.opaque.appendices.implementation.lala"></a><h4>
+<a name="id5018466"></a>
+ lala
+ </h4>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="boost.opaque.appendices.acknowledgements"></a><a href="index.html#boost.opaque.appendices.acknowledgements" title=" Appendix D:
+ Acknowledgements"> Appendix D:
+ Acknowledgements</a>
+</h3></div></div></div>
+<p>
+ Thanks to .
+ </p>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="boost.opaque.appendices.appendix_e__tests"></a><a href="index.html#boost.opaque.appendices.appendix_e__tests" title="Appendix E:
+ Tests">Appendix E:
+ Tests</a>
+</h3></div></div></div>
+<div class="toc"><dl>
+<dt><span class="section">new_class</span></dt>
+<dt><span class="section">new_type</span></dt>
+<dt><span class="section">public_opaque_class</span></dt>
+</dl></div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost.opaque.appendices.appendix_e__tests.new_class"></a>new_class
+</h4></div></div></div>
+<div class="table">
+<a name="boost.opaque.appendices.appendix_e__tests.new_class.contructors_and_assignement"></a><p class="title"><b>Table&#160;7.&#160;Contructors and Assignement</b></p>
+<table class="table" summary="Contructors and Assignement">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ kind
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Result
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ regular_pass
+ </p>
+ </td>
+<td>
+ <p>
+ run
+ </p>
+ </td>
+<td>
+ <p>
+ check constructors and assignements
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ assign_siblings_fail
+ </p>
+ </td>
+<td>
+ <p>
+ compile-fail
+ </p>
+ </td>
+<td>
+ <p>
+ check siblings assignement fail
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ assign_up_fail
+ </p>
+ </td>
+<td>
+ <p>
+ compile-fail
+ </p>
+ </td>
+<td>
+ <p>
+ check NT can not be assigned to UT
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ assign_down_fail
+ </p>
+ </td>
+<td>
+ <p>
+ compile-fail
+ </p>
+ </td>
+<td>
+ <p>
+ check UT can not be assigned to NT
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ copy_construct_from_non_convertible_fail
+ </p>
+ </td>
+<td>
+ <p>
+ compile-fail
+ </p>
+ </td>
+<td>
+ <p>
+ check constructor from non convertibe to UT fails
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="table">
+<a name="boost.opaque.appendices.appendix_e__tests.new_class.relational_operators"></a><p class="title"><b>Table&#160;8.&#160;Relational Operators</b></p>
+<table class="table" summary="Relational Operators">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ kind
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Result
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ using_equal_pass
+ </p>
+ </td>
+<td>
+ <p>
+ run
+ </p>
+ </td>
+<td>
+ <p>
+ check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">==</span></code> is available when adding <code class="computeroutput"><span class="identifier">using_equal</span></code> meta-mixin
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ using_not_equal_pass
+ </p>
+ </td>
+<td>
+ <p>
+ run
+ </p>
+ </td>
+<td>
+ <p>
+ check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">!=</span></code> is available when adding <code class="computeroutput"><span class="identifier">using_not_equal</span></code> meta-mixin
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ using_less_than_pass
+ </p>
+ </td>
+<td>
+ <p>
+ run
+ </p>
+ </td>
+<td>
+ <p>
+ check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">&lt;</span></code> is available when adding
+ <code class="computeroutput"><span class="identifier">using_less_than</span></code>
+ meta-mixin
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ using_less_than_equal_pass
+ </p>
+ </td>
+<td>
+ <p>
+ run
+ </p>
+ </td>
+<td>
+ <p>
+ check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">&lt;=</span></code> is available when adding
+ <code class="computeroutput"><span class="identifier">using_less_than_equal</span></code>
+ meta-mixin
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ using_greater_than_pass
+ </p>
+ </td>
+<td>
+ <p>
+ run
+ </p>
+ </td>
+<td>
+ <p>
+ check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">&gt;</span></code> is available when adding
+ <code class="computeroutput"><span class="identifier">using_greater_than</span></code>
+ meta-mixin
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ using_greater_than_equal_pass
+ </p>
+ </td>
+<td>
+ <p>
+ run
+ </p>
+ </td>
+<td>
+ <p>
+ check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">&gt;=</span></code> is available when adding
+ <code class="computeroutput"><span class="identifier">using_greater_than_equal</span></code>
+ meta-mixin
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ equal_fail
+ </p>
+ </td>
+<td>
+ <p>
+ compile-fail
+ </p>
+ </td>
+<td>
+ <p>
+ check check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">==</span></code> fail on default new_class
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ not_equal_fail
+ </p>
+ </td>
+<td>
+ <p>
+ compile-fail
+ </p>
+ </td>
+<td>
+ <p>
+ check check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">!=</span></code> fail on default new_class
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ less_than_equal_fail
+ </p>
+ </td>
+<td>
+ <p>
+ compile-fail
+ </p>
+ </td>
+<td>
+ <p>
+ check check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">&lt;=</span></code> fail on default new_class
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ less_than_fail
+ </p>
+ </td>
+<td>
+ <p>
+ compile-fail
+ </p>
+ </td>
+<td>
+ <p>
+ check check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">&lt;</span></code> fail on default new_class
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ greater_than_equal_fail
+ </p>
+ </td>
+<td>
+ <p>
+ compile-fail
+ </p>
+ </td>
+<td>
+ <p>
+ check check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">&gt;=</span></code> fail on default new_class
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ greater_than_fail
+ </p>
+ </td>
+<td>
+ <p>
+ compile-fail
+ </p>
+ </td>
+<td>
+ <p>
+ check check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">&gt;</span></code> fail on default new_class
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="table">
+<a name="boost.opaque.appendices.appendix_e__tests.new_class.arithmetic_operators"></a><p class="title"><b>Table&#160;9.&#160;Arithmetic Operators</b></p>
+<table class="table" summary="Arithmetic Operators">
 <colgroup>
 <col>
 <col>
 <col>
+<col>
 </colgroup>
 <thead><tr>
 <th>
                   <p>
- Meta-Mixin
+ Name
                   </p>
                 </th>
 <th>
                   <p>
- Meta-Mixin Sequence
+ kind
                   </p>
                 </th>
 <th>
                   <p>
- Ref
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Result
                   </p>
                 </th>
 </tr></thead>
@@ -2732,614 +5215,819 @@
 <tr>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_equality_comparable1</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ using_plus_pass
+ </p>
+ </td>
+<td>
+ <p>
+ run
+ </p>
+ </td>
+<td>
+ <p>
+ check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">+</span></code> is available when adding <code class="computeroutput"><span class="identifier">using_plus</span></code> meta-mixin
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ using_plus_assign_pass
+ </p>
+ </td>
+<td>
+ <p>
+ run
+ </p>
+ </td>
+<td>
+ <p>
+ check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">+=</span></code> is available when adding <code class="computeroutput"><span class="identifier">using_plus_assign</span></code> meta-mixin
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ using_minus_pass
+ </p>
+ </td>
+<td>
+ <p>
+ run
+ </p>
+ </td>
+<td>
+ <p>
+ check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">-</span></code> is available when adding <code class="computeroutput"><span class="identifier">using_minus</span></code> meta-mixin
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ using_minus_assign_pass
+ </p>
+ </td>
+<td>
+ <p>
+ run
+ </p>
+ </td>
+<td>
+ <p>
+ check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">-=</span></code> is available when adding <code class="computeroutput"><span class="identifier">using_minus_assign</span></code> meta-mixin
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ using_multiply_pass
+ </p>
+ </td>
+<td>
+ <p>
+ run
+ </p>
+ </td>
+<td>
+ <p>
+ check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">*</span></code> is available when adding <code class="computeroutput"><span class="identifier">using_multiply</span></code> meta-mixin
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ using_multiply_assign_pass
+ </p>
+ </td>
+<td>
+ <p>
+ run
+ </p>
+ </td>
+<td>
+ <p>
+ check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">*=</span></code> is available when adding <code class="computeroutput"><span class="identifier">using_multiply_assign</span></code> meta-mixin
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ using_divide_pass
+ </p>
+ </td>
+<td>
+ <p>
+ run
+ </p>
+ </td>
+<td>
+ <p>
+ check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">/</span></code> is available when adding <code class="computeroutput"><span class="identifier">using_divide</span></code> meta-mixin
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ using_divide_assign_pass
+ </p>
+ </td>
+<td>
+ <p>
+ run
+ </p>
+ </td>
+<td>
+ <p>
+ check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">/=</span></code> is available when adding <code class="computeroutput"><span class="identifier">using_divide_assign</span></code> meta-mixin
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ using_modulus_pass
+ </p>
+ </td>
+<td>
+ <p>
+ run
+ </p>
+ </td>
+<td>
+ <p>
+ check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">%</span></code> is available when adding <code class="computeroutput"><span class="identifier">using_modulus</span></code> meta-mixin
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ using_modulus_assign_pass
+ </p>
+ </td>
+<td>
+ <p>
+ run
+ </p>
+ </td>
+<td>
+ <p>
+ check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">%=</span></code> is available when adding <code class="computeroutput"><span class="identifier">using_modulus_assign</span></code> meta-mixin
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ using_unary_plus_pass
+ </p>
+ </td>
+<td>
+ <p>
+ run
+ </p>
+ </td>
+<td>
+ <p>
+ check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">+()</span></code> is available when adding
+ <code class="computeroutput"><span class="identifier">using_unary_plus</span></code>
+ meta-mixin
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ using_unary_minus_pass
+ </p>
+ </td>
+<td>
+ <p>
+ run
+ </p>
+ </td>
+<td>
+ <p>
+ check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">-()</span></code> is available when adding
+ <code class="computeroutput"><span class="identifier">using_unary_minus</span></code>
+ meta-mixin
+ </p>
+ </td>
+<td>
+ <p>
+ Pass
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ using_pre_increment_pass
+ </p>
+ </td>
+<td>
+ <p>
+ run
                   </p>
                 </td>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_equal</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>,
- <br> <code class="computeroutput"><span class="identifier">using_not_equal</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">++()</span></code> is available when adding
+ <code class="computeroutput"><span class="identifier">using_pre_increment</span></code>
+ meta-mixin
                   </p>
                 </td>
 <td>
                   <p>
- 20.1.1
+ Pass
                   </p>
                 </td>
 </tr>
 <tr>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_less_than_comparable1</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ using_post_increment_pass
                   </p>
                 </td>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_less_than</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code> <br> <code class="computeroutput"><span class="identifier">using_less_than_equal</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code> <br> <code class="computeroutput"><span class="identifier">using_greater_than_equal</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code> <br> <code class="computeroutput"><span class="identifier">using_greater_than</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ run
                   </p>
                 </td>
 <td>
                   <p>
- 20.1.2
+ check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">++(</span><span class="keyword">int</span><span class="special">)</span></code> is available when adding <code class="computeroutput"><span class="identifier">using_post_increment</span></code> meta-mixin
                   </p>
                 </td>
-</tr>
-<tr>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_partially_ordered1</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ Pass
                   </p>
                 </td>
+</tr>
+<tr>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_less_than</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code> <br> <code class="computeroutput"><span class="identifier">using_less_than_equal</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code> <br> <code class="computeroutput"><span class="identifier">using_greater_than_equal</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code> <br> <code class="computeroutput"><span class="identifier">using_greater_than</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ using_pre_decrement_pass
                   </p>
                 </td>
 <td>
                   <p>
- 20.1.2
+ run
                   </p>
                 </td>
-</tr>
-<tr>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_addable1</span></code>
+ check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">--()</span></code> is available when adding
+ <code class="computeroutput"><span class="identifier">using_pre_decrement</span></code>
+ meta-mixin
                   </p>
                 </td>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_plus_assign</span></code>
- <br> <code class="computeroutput"><span class="identifier">using_plus</span></code>
+ Pass
                   </p>
                 </td>
-<td>
- </td>
 </tr>
 <tr>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_subtractable1</span></code>
+ using_post_decrement_pass
                   </p>
                 </td>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_minus_assign</span></code>
- <br> <code class="computeroutput"><span class="identifier">using_minus</span></code>
+ run
                   </p>
                 </td>
 <td>
- </td>
-</tr>
-<tr>
-<td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_multipliable1</span></code>
+ check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">--(</span><span class="keyword">int</span><span class="special">)</span></code> is available when adding <code class="computeroutput"><span class="identifier">using_post_decrement</span></code> meta-mixin
                   </p>
                 </td>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_multiply_assign</span></code>
- <br> <code class="computeroutput"><span class="identifier">using_multiply</span></code>
+ Pass
                   </p>
                 </td>
-<td>
- </td>
 </tr>
+</tbody>
+</table>
+</div>
+<div class="table">
+<a name="boost.opaque.appendices.appendix_e__tests.new_class.bitwise_operators"></a><p class="title"><b>Table&#160;10.&#160;Bitwise Operators</b></p>
+<table class="table" summary="Bitwise Operators">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ kind
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Result
+ </p>
+ </th>
+</tr></thead>
+<tbody>
 <tr>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_dividable1</span></code>
+ using_bitwise_not_pass
                   </p>
                 </td>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_divide_assign</span></code>
- <br> <code class="computeroutput"><span class="identifier">using_divide</span></code>
+ run
                   </p>
                 </td>
 <td>
- </td>
-</tr>
-<tr>
-<td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_modable1</span></code>
+ check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">~</span></code> is available when adding <code class="computeroutput"><span class="identifier">using_bitwise_not</span></code> meta-mixin
                   </p>
                 </td>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_modulus_assign</span></code>
- <br> <code class="computeroutput"><span class="identifier">using_modulus</span></code>
+ Pass
                   </p>
                 </td>
-<td>
- </td>
 </tr>
 <tr>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_bitwise_xorable1</span></code>
+ using_bitwise_xor_pass
                   </p>
                 </td>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_bitwise_xor_assign</span></code>
- <br> <code class="computeroutput"><span class="identifier">using_bitwise_xor</span></code>
+ run
                   </p>
                 </td>
 <td>
- </td>
-</tr>
-<tr>
-<td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_bitwise_orable1</span></code>
+ check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">^</span></code> is available when adding <code class="computeroutput"><span class="identifier">using_bitwise_xor</span></code> meta-mixin
                   </p>
                 </td>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_bitwise_or_assign</span></code>
- <br> <code class="computeroutput"><span class="identifier">using_bitwise_or</span></code>
+ Pass
                   </p>
                 </td>
-<td>
- </td>
 </tr>
 <tr>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_bitwise_andable1</span></code>
+ using_bitwise_xor_assign_pass
                   </p>
                 </td>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_bitwise_and_assign</span></code>
- <br> <code class="computeroutput"><span class="identifier">using_bitwise_and</span></code>
+ run
                   </p>
                 </td>
 <td>
- </td>
-</tr>
-<tr>
-<td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_left_shiftable1</span></code>
+ check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">^=</span></code> is available when adding <code class="computeroutput"><span class="identifier">using_bitwise_xor_assign</span></code> meta-mixin
                   </p>
                 </td>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_left_right_assign</span></code>
- <br> <code class="computeroutput"><span class="identifier">using_left_shift1</span></code>
+ Pass
                   </p>
                 </td>
-<td>
- </td>
 </tr>
 <tr>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_right_shiftable1</span></code>
+ using_bitwise_or_pass
                   </p>
                 </td>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_right_shift_assign</span></code>
- <br> <code class="computeroutput"><span class="identifier">using_right_shift1</span></code>
+ run
+ </p>
+ </td>
+<td>
+ <p>
+ check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">|</span></code> is available when adding <code class="computeroutput"><span class="identifier">using_bitwise_or</span></code> meta-mixin
                   </p>
                 </td>
 <td>
+ <p>
+ Pass
+ </p>
                 </td>
 </tr>
 <tr>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_incrementable</span></code>
+ using_bitwise_or_assign_pass
                   </p>
                 </td>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_pre_increment</span><span class="special">&gt;</span></code> <br> <code class="computeroutput"><span class="identifier">using_post_increment</span></code>
+ run
+ </p>
+ </td>
+<td>
+ <p>
+ check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">|=</span></code> is available when adding <code class="computeroutput"><span class="identifier">using_bitwise_or_assign</span></code> meta-mixin
                   </p>
                 </td>
 <td>
+ <p>
+ Pass
+ </p>
                 </td>
 </tr>
 <tr>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_decrementable</span></code>
+ using_bitwise_and_pass
                   </p>
                 </td>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_pre_decrement</span><span class="special">&gt;</span></code> <br> <code class="computeroutput"><span class="identifier">using_post_decrement</span></code>
+ run
                   </p>
                 </td>
 <td>
- </td>
-</tr>
-</tbody>
-</table></div>
-<div class="informaltable"><table class="table">
-<colgroup>
-<col>
-<col>
-<col>
-</colgroup>
-<thead><tr>
-<th>
                   <p>
- Meta-Mixin
+ check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">&amp;</span></code> is available when adding
+ <code class="computeroutput"><span class="identifier">using_bitwise_and</span></code>
+ meta-mixin
                   </p>
- </th>
-<th>
+ </td>
+<td>
                   <p>
- Meta-Mixin Sequence
+ Pass
                   </p>
- </th>
-<th>
+ </td>
+</tr>
+<tr>
+<td>
                   <p>
- Ref
+ using_bitwise_and_assign_pass
                   </p>
- </th>
-</tr></thead>
-<tbody>
-<tr>
+ </td>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_totally_ordered1</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ run
                   </p>
                 </td>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_equality_comparable1</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code> <br> <code class="computeroutput"><span class="identifier">using_less_than_comparable1</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">&amp;=</span></code> is available when adding
+ <code class="computeroutput"><span class="identifier">using_bitwise_and_assign</span></code>
+ meta-mixin
                   </p>
                 </td>
 <td>
+ <p>
+ Pass
+ </p>
                 </td>
 </tr>
 <tr>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_additive1</span></code>
+ using_left_shift_pass
                   </p>
                 </td>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_addable1</span></code>
- <br> <code class="computeroutput"><span class="identifier">using_subtractable1</span></code>
+ run
+ </p>
+ </td>
+<td>
+ <p>
+ check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">&lt;&lt;</span></code> is available when adding
+ <code class="computeroutput"><span class="identifier">using_left_shift</span></code>
+ meta-mixin
                   </p>
                 </td>
 <td>
+ <p>
+ Pass
+ </p>
                 </td>
 </tr>
 <tr>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_multiplicative1</span></code>
+ using_left_shift_assign_pass
                   </p>
                 </td>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_multipliable1</span></code>
- <br> <code class="computeroutput"><span class="identifier">using_dividable1</span></code>
+ run
+ </p>
+ </td>
+<td>
+ <p>
+ check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">&lt;&lt;=</span></code> is available when adding
+ <code class="computeroutput"><span class="identifier">using_left_shift_assign</span></code>
+ meta-mixin
                   </p>
                 </td>
 <td>
+ <p>
+ Pass
+ </p>
                 </td>
 </tr>
 <tr>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">integer_multiplicative1</span></code>
+ using_right_shift_pass
                   </p>
                 </td>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_multiplicative1</span></code>
- <br> <code class="computeroutput"><span class="identifier">using_modable1</span></code>
+ run
+ </p>
+ </td>
+<td>
+ <p>
+ check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">&gt;&gt;</span></code> is available when adding
+ <code class="computeroutput"><span class="identifier">using_right_shift</span></code>
+ meta-mixin
                   </p>
                 </td>
 <td>
+ <p>
+ Pass
+ </p>
                 </td>
 </tr>
 <tr>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_arithmetic1</span></code>
+ using_right_shift_assign_pass
                   </p>
                 </td>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_additive1</span></code>
- <br> <code class="computeroutput"><span class="identifier">using_multiplicative1</span></code>
+ run
                   </p>
                 </td>
 <td>
+ <p>
+ check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">&gt;&gt;=</span></code> is available when adding
+ <code class="computeroutput"><span class="identifier">using_right_shift_assign</span></code>
+ meta-mixin
+ </p>
                 </td>
-</tr>
-<tr>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_integer_arithmetic1</span></code>
+ Pass
                   </p>
                 </td>
+</tr>
+</tbody>
+</table>
+</div>
+<div class="table">
+<a name="boost.opaque.appendices.appendix_e__tests.new_class.logical_operators"></a><p class="title"><b>Table&#160;11.&#160;Logical Operators</b></p>
+<table class="table" summary="Logical Operators">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Name
+ </p>
+ </th>
+<th>
+ <p>
+ kind
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Result
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_additive1</span></code>
- <br> <code class="computeroutput"><span class="identifier">integer_multiplicative1</span></code>
+ using_logical_not_pass
                   </p>
                 </td>
 <td>
- </td>
-</tr>
-<tr>
-<td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_bitwise1</span></code>
+ run
                   </p>
                 </td>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_bitwise_xorable1</span></code>
- <br> <code class="computeroutput"><span class="identifier">using_bitwise_orable1</span></code>
- <br> <code class="computeroutput"><span class="identifier">using_bitwise_andable1</span></code>
+ check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">!</span></code> is available when adding <code class="computeroutput"><span class="identifier">using_logical_not</span></code> meta-mixin
                   </p>
                 </td>
 <td>
+ <p>
+ Pass
+ </p>
                 </td>
 </tr>
 <tr>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_unit_steppable</span></code>
+ using_logical_and_pass
                   </p>
                 </td>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_incrementable</span></code>
- <br> <code class="computeroutput"><span class="identifier">using_decrementable</span></code>
+ run
                   </p>
                 </td>
 <td>
- </td>
-</tr>
-<tr>
-<td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_shiftable1</span></code>
+ check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">&amp;&amp;</span></code> is available when adding
+ <code class="computeroutput"><span class="identifier">using_logical_and</span></code>
+ meta-mixin
                   </p>
                 </td>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_left_shiftable1</span></code>
- <br> <code class="computeroutput"><span class="identifier">using_right_shiftable1</span></code>
+ Pass
                   </p>
                 </td>
-<td>
- </td>
 </tr>
 <tr>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_ring_operators1</span></code>
+ using_logical_or_pass
                   </p>
                 </td>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_additive1</span></code>
- <br> <code class="computeroutput"><span class="identifier">using_multipliable1</span></code>
+ run
                   </p>
                 </td>
 <td>
- </td>
-</tr>
-<tr>
-<td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_ordered_ring_operators1</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ check <code class="computeroutput"><span class="identifier">oparator</span><span class="special">||</span></code> is available when adding <code class="computeroutput"><span class="identifier">using_logical_and</span></code> meta-mixin
                   </p>
                 </td>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_ring_operators1</span></code>
- <br> <code class="computeroutput"><span class="identifier">using_totally_ordered1</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ Pass
                   </p>
                 </td>
-<td>
- </td>
 </tr>
-<tr>
-<td>
+</tbody>
+</table>
+</div>
+</div>
+<div class="section" lang="en">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost.opaque.appendices.appendix_e__tests.new_type"></a>new_type
+</h4></div></div></div>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
                   <p>
- <code class="computeroutput"><span class="identifier">using_field_operators1</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ Name
                   </p>
- </td>
-<td>
+ </th>
+<th>
                   <p>
- <code class="computeroutput"><span class="identifier">using_ring_operators1</span></code>
- <br> <code class="computeroutput"><span class="identifier">using_dividable1</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ kind
                   </p>
- </td>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+<th>
+ <p>
+ Result
+ </p>
+ </th>
+</tr></thead>
+<tbody><tr>
 <td>
+ <p>
+ regular.pass
+ </p>
                 </td>
-</tr>
-<tr>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_ordered_field_operators1</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ run
                   </p>
                 </td>
 <td>
                   <p>
- <code class="computeroutput"><span class="identifier">using_field_operators1</span></code>
- <br> <code class="computeroutput"><span class="identifier">using_totally_ordered1</span><span class="special">&lt;</span><span class="identifier">Bool</span><span class="special">&gt;</span></code>
+ check constructors and assignements
                   </p>
                 </td>
 <td>
+ <p>
+ Pass
+ </p>
                 </td>
-</tr>
-</tbody>
+</tr></tbody>
 </table></div>
 </div>
 <div class="section" lang="en">
 <div class="titlepage"><div><div><h4 class="title">
-<a name="boost.opaque.reference.meta_mixins.hiding_combined_operators_hpp"></a><a href="index.html#boost.opaque.reference.meta_mixins.hiding_combined_operators_hpp" title="
- Header &lt;boost/opaque/metamixin/hiding_combined_operators.hpp&gt;">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">metamixin</span><span class="special">/</span><span class="identifier">hiding_combined_operators</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
-</h4></div></div></div>
-<p>
- This file includes meta-mixins combining several hiding meta-mixins that
- are used to hide operator overloads that have been defined by a base clas.
- </p>
-<p>
- These meta-mixins have names that follows the naming used in Boost.Operators,
- but prefixed by <code class="computeroutput"><span class="identifier">hiding_</span></code>.
- </p>
-</div>
-<div class="section" lang="en">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="boost.opaque.reference.meta_mixins.transitive_substituable_hpp"></a><a href="index.html#boost.opaque.reference.meta_mixins.transitive_substituable_hpp" title="
- Header &lt;boost/opaque/metamixin/transitive_substituable.hpp&gt;">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">metamixin</span><span class="special">/</span><span class="identifier">transitive_substituable</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
-</h4></div></div></div>
-<div class="toc"><dl><dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.transitive_substituable_hpp.transitive_substituable">
- Class Template <code class="computeroutput"><span class="identifier">transitive_substituable</span><span class="special">&lt;&gt;</span></code></a></span></dt></dl></div>
-<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
- <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">BaseClass</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">UT</span><span class="special">&gt;</span>
- <span class="keyword">struct</span> <span class="identifier">transitive_substituable</span><span class="special">;</span>
-<span class="special">}</span>
-</pre>
-<div class="section" lang="en">
-<div class="titlepage"><div><div><h5 class="title">
-<a name="boost.opaque.reference.meta_mixins.transitive_substituable_hpp.transitive_substituable"></a><a href="index.html#boost.opaque.reference.meta_mixins.transitive_substituable_hpp.transitive_substituable" title="
- Class Template transitive_substituable&lt;&gt;">
- Class Template <code class="computeroutput"><span class="identifier">transitive_substituable</span><span class="special">&lt;&gt;</span></code></a>
-</h5></div></div></div>
-<p>
- This metamixin provides the Final class implicit conversions for all
- the underlying types hierarchy.
- </p>
-<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">BaseClass</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">UT</span><span class="special">&gt;</span>
-<span class="keyword">struct</span> <span class="identifier">transitive_substituable</span><span class="special">;</span>
-</pre>
-</div>
-</div>
-<div class="section" lang="en">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="boost.opaque.reference.meta_mixins.transitive_explicit_substituable_hpp"></a><a href="index.html#boost.opaque.reference.meta_mixins.transitive_explicit_substituable_hpp" title="
- Header &lt;boost/opaque/metamixin/transitive_explicit_substituable.hpp&gt;">
- Header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">opaque</span><span class="special">/</span><span class="identifier">metamixin</span><span class="special">/</span><span class="identifier">transitive_explicit_substituable</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code></a>
-</h4></div></div></div>
-<div class="toc"><dl><dt><span class="section"><a href="index.html#boost.opaque.reference.meta_mixins.transitive_explicit_substituable_hpp.transitive_explicit_substituable">
- Class Template <code class="computeroutput"><span class="identifier">transitive_explicit_substituable</span><span class="special">&lt;&gt;</span></code></a></span></dt></dl></div>
-<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
- <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">BaseClass</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">UT</span><span class="special">&gt;</span>
- <span class="keyword">struct</span> <span class="identifier">transitive_explicit_substituable</span><span class="special">;</span>
-<span class="special">}</span>
-</pre>
-<div class="section" lang="en">
-<div class="titlepage"><div><div><h5 class="title">
-<a name="boost.opaque.reference.meta_mixins.transitive_explicit_substituable_hpp.transitive_explicit_substituable"></a><a href="index.html#boost.opaque.reference.meta_mixins.transitive_explicit_substituable_hpp.transitive_explicit_substituable" title="
- Class Template transitive_explicit_substituable&lt;&gt;">
- Class Template <code class="computeroutput"><span class="identifier">transitive_explicit_substituable</span><span class="special">&lt;&gt;</span></code></a>
-</h5></div></div></div>
-<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">BaseClass</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">UT</span><span class="special">&gt;</span>
-<span class="keyword">struct</span> <span class="identifier">transitive_explicit_substituable</span><span class="special">;</span>
-</pre>
-<p>
- This metamixin provides the Final class explicit conversions for all
- the underlying types hierarchy (when the compiler supports explicit conversion
- operators). For portability purposed the library provide as workarround
- a convert_to non member function.
- </p>
-<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">BaseClass</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">UT</span><span class="special">&gt;</span>
-<span class="keyword">struct</span> <span class="identifier">transitive_explicit_substituable</span><span class="special">;</span>
-</pre>
-</div>
-</div>
-</div>
-</div>
-<div class="section" lang="en">
-<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="boost.opaque.appendices"></a>Appendices
-</h2></div></div></div>
-<div class="toc"><dl>
-<dt><span class="section"> Appendix A: History</span></dt>
-<dd><dl><dt><span class="section">Version 0.1.0, October 18, 2010 </span></dt></dl></dd>
-<dt><span class="section"><a href="index.html#boost.opaque.appendices.rationale"> Appendix B: Design
- Rationale</a></span></dt>
-<dt><span class="section"><a href="index.html#boost.opaque.appendices.implementation"> Appendix C:
- Implementation Notes</a></span></dt>
-<dt><span class="section"><a href="index.html#boost.opaque.appendices.acknowledgements"> Appendix D:
- Acknowledgements</a></span></dt>
-<dt><span class="section"><a href="index.html#boost.opaque.appendices.appendix_e__tests">Appendix E:
- Tests</a></span></dt>
-<dd><dl><dt><span class="section">Builtins</span></dt></dl></dd>
-<dt><span class="section"><a href="index.html#boost.opaque.appendices.appendix_f__tickets">Appendix
- F: Tickets</a></span></dt>
-<dt><span class="section"> Appendix F: Future plans</span></dt>
-</dl></div>
-<div class="section" lang="en">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="boost.opaque.appendices.history"></a> Appendix A: History
-</h3></div></div></div>
-<div class="toc"><dl><dt><span class="section">Version 0.1.0, October 18, 2010 </span></dt></dl></div>
-<div class="section" lang="en">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="boost.opaque.appendices.history.__version_0_1_0__october_18__2010__"></a>Version 0.1.0, October 18, 2010
-</h4></div></div></div>
-<p>
- <span class="bold"><strong>Features:</strong></span>
- </p>
-<div class="itemizedlist"><ul type="disc"><li>
- a
- </li></ul></div>
-</div>
-</div>
-<div class="section" lang="en">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="boost.opaque.appendices.rationale"></a><a href="index.html#boost.opaque.appendices.rationale" title=" Appendix B: Design
- Rationale"> Appendix B: Design
- Rationale</a>
-</h3></div></div></div>
-<a name="boost.opaque.appendices.rationale.lala"></a><h4>
-<a name="id5012523"></a>
- lala
- </h4>
-</div>
-<div class="section" lang="en">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="boost.opaque.appendices.implementation"></a><a href="index.html#boost.opaque.appendices.implementation" title=" Appendix C:
- Implementation Notes"> Appendix C:
- Implementation Notes</a>
-</h3></div></div></div>
-<a name="boost.opaque.appendices.implementation.lala"></a><h4>
-<a name="id5012561"></a>
- lala
- </h4>
-</div>
-<div class="section" lang="en">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="boost.opaque.appendices.acknowledgements"></a><a href="index.html#boost.opaque.appendices.acknowledgements" title=" Appendix D:
- Acknowledgements"> Appendix D:
- Acknowledgements</a>
-</h3></div></div></div>
-<p>
- Thanks to .
- </p>
-</div>
-<div class="section" lang="en">
-<div class="titlepage"><div><div><h3 class="title">
-<a name="boost.opaque.appendices.appendix_e__tests"></a><a href="index.html#boost.opaque.appendices.appendix_e__tests" title="Appendix E:
- Tests">Appendix E:
- Tests</a>
-</h3></div></div></div>
-<div class="toc"><dl><dt><span class="section">Builtins</span></dt></dl></div>
-<div class="section" lang="en">
-<div class="titlepage"><div><div><h4 class="title">
-<a name="boost.opaque.appendices.appendix_e__tests.builtins"></a>Builtins
+<a name="boost.opaque.appendices.appendix_e__tests.public_opaque_class"></a>public_opaque_class
 </h4></div></div></div>
 <div class="informaltable"><table class="table">
 <colgroup>
@@ -3347,7 +6035,6 @@
 <col>
 <col>
 <col>
-<col>
 </colgroup>
 <thead><tr>
 <th>
@@ -3370,16 +6057,11 @@
                     Result
                   </p>
                 </th>
-<th>
- <p>
- Ticket
- </p>
- </th>
 </tr></thead>
 <tbody><tr>
 <td>
                   <p>
- convert_to_with_builtin_types
+ regular.pass
                   </p>
                 </td>
 <td>
@@ -3389,8 +6071,7 @@
                 </td>
 <td>
                   <p>
- check <code class="computeroutput"><span class="identifier">convert_to</span></code>
- works for builting types
+ check constructors and assignements
                   </p>
                 </td>
 <td>
@@ -3398,11 +6079,6 @@
                     Pass
                   </p>
                 </td>
-<td>
- <p>
- #
- </p>
- </td>
 </tr></tbody>
 </table></div>
 </div>
@@ -3417,26 +6093,23 @@
 <a name="boost.opaque.appendices.todo"></a> Appendix F: Future plans
 </h3></div></div></div>
 <a name="boost.opaque.appendices.todo.tasks_to_do_before_review"></a><h4>
-<a name="id5012781"></a>
+<a name="id5021692"></a>
         <a href="index.html#boost.opaque.appendices.todo.tasks_to_do_before_review">Tasks
         to do before review</a>
       </h4>
-<div class="itemizedlist"><ul type="disc"><li>
- lala
- </li></ul></div>
-<a name="boost.opaque.appendices.todo.for_later_releases"></a><h4>
-<a name="id5012814"></a>
- <a href="index.html#boost.opaque.appendices.todo.for_later_releases">For later
- releases</a>
- </h4>
-<div class="itemizedlist"><ul type="disc"><li>
- lala
- </li></ul></div>
+<div class="itemizedlist"><ul type="disc">
+<li>
+ Complete the tests
+ </li>
+<li>
+ Add hiding meta-mixins
+ </li>
+</ul></div>
 </div>
 </div>
 </div>
 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
-<td align="left"><p><small>Last revised: October 03, 2010 at 19:53:00 GMT</small></p></td>
+<td align="left"><p><small>Last revised: October 04, 2010 at 20:36:10 GMT</small></p></td>
 <td align="right"><div class="copyright-footer"></div></td>
 </tr></table>
 <hr>

Modified: sandbox/opaque/libs/opaque/doc/opaque.qbk
==============================================================================
--- sandbox/opaque/libs/opaque/doc/opaque.qbk (original)
+++ sandbox/opaque/libs/opaque/doc/opaque.qbk 2010-10-04 16:37:53 EDT (Mon, 04 Oct 2010)
@@ -102,7 +102,7 @@
 # Application of inheritance makes no provision that permits a base class to be cv-qualified.
 ]
 
-In Alisdair Meredith showed in [] the implicitly generating forwarding constructors to a base class new C++0x feature could not be useful to address this issue completly. Using this new feature it becomes possible to create something very like the required opaque typedef. For example:
+In Alisdair Meredith showed in [] the implicitly generating forwarding constructors to a base class new C++0x feature could not be useful to address this issue completly. Using this new feature it becomes possible to create something very like the required opaque typedef. For example:
 
     struct MyType : std::string {
         using string::string;
@@ -228,10 +228,10 @@
 We will start with the definition of a new type identifier which is based on an underlying int type and has the relational operators so it can be stored on a sorted container.
 
     struct Identifier_tag;
- typedef boost::opaque::new_type< int, Identifier_tag,
+ typedef boost::opaque::new_type< int, Identifier_tag,
         boost::mpl::vector<
             opaque::using_totally_ordered1
- >
+ >
> Identifier;
 
 The declaration of a new typedef Identifier is done as follows. We need to declare a specific tag that will ensure that two new types are different.
@@ -260,16 +260,16 @@
 
 In the prededing example we use a tag to ensure type unicity. When the user needs to add yet some specific methods, this tag is no more necessary as we need to define already a new class.
 
- class Identifier : boost::opaque::new_class<Identifier, int,
+ class Identifier : boost::opaque::new_class<Identifier, int,
         boost::mpl::vector<
             opaque::using_totally_ordered1
- >
+ >
     {
         void print();
         // ...
     };
 
-In this case we use the mixin class `new_class` instead. The `new_class` class template has the following arguments,
+In this case we use the mixin class `new_class` instead. The `new_class` class template has the following arguments,
 
 * the class we are defining
 * the underlying type (`int`),
@@ -297,7 +297,7 @@
     Bool f(Int a, Int b)
     {
         if(cnd()) return 0; // 1
- else return a > b;
+ else return a > b;
     }
 
 We can define an bool opaque typedef so only `true_` and `false_` are accepted as constant expressions
@@ -307,25 +307,25 @@
 
     Bool f(Int a, Int b)
     {
- if(cnd()) return 0; // (1) Error
- else return a > b; // (2) Error
+ if(cnd()) return 0; // (1) Error
+ else return a > b; // (2) Error
     }
 
-Now we get an error on (1) as `0` is not convertible to `opaque::boolean`. This can be easily solved
+Now we get an error on (1) as `0` is not convertible to `opaque::boolean`. This can be easily solved
 
     Bool f(Int a, Int b)
     {
         if(cnd()) return opaque::false_; // OK
- else return a > b; // (2) Error
+ else return a > b; // (2) Error
     }
 
-But now we also get an error on (2) as `a > b` is not convertible to `opaque::boolean`. To solve this issue we need that the signature `Int > Int` be convertible to `opaque::boolean`.
+But now we also get an error on (2) as `a > b` is not convertible to `opaque::boolean`. To solve this issue we need that the signature `Int > Int` be convertible to `opaque::boolean`.
 
 [*Boost.Opaque] provides a meta-mixin that allos to define an integer-like class that use `opaque::boolean` as type for the result of the relational operators.
 
     struct Int_tag;
     typedef boost::opaque::new_type<int, Int_tag, boost::mpl::vector<
- opaque::using_integer_like<opaque::boolean>
+ opaque::using_integer_like<opaque::boolean>
> > Int;
 
 With this definition, the preceding example compiles and does what we are expecting.
@@ -339,7 +339,7 @@
 
 [section Opaque typedefs]
 
-While the preceding examples restrict the operations of the underlying type, sometimes it is useful to define a different type that provides the same operations than the underlying type and that allows some conversions. In this case we use the opaque typedefs.
+While the preceding examples restrict the operations of the underlying type, sometimes it is useful to define a different type that provides the same operations than the underlying type and that allows some conversions. In this case we use the opaque typedefs.
 
 For example, we can need real new typedefs to be able to overload a function. This can be done with the `BOOST_OPAQUE_PUBLIC_TYPEDEF` macro.
 
@@ -367,6 +367,13 @@
 
 [section Explicit versus Implicit Conversions to the UT]
 
+Opaque typedef are explicitly convertible to the underlying type. But are they implicitly convertible? It depends. So the library provide two kind of opaque typedef :
+
+* public opaque typedef: implicit conversion to the underlying type
+* public opaque typedef: explict conversion to the underlying type
+
+
+
 [endsect]
 
 [section Hiding inherited operations]
@@ -391,10 +398,17 @@
 [endsect]
 [section Underlying types hierarchy]
 
+Opaque and underlying types form a hierarchy with a implicit or explicit conversion from the OT to the UT. This convertibility is a relation.
+It seems natural that this relation satisfy the transitivity property.
+
 [endsect]
 
 [section Using UDT as Underlying types]
 
+Talk about the problem with direct data access that can not be wrapped by the underlying type.
+
+For example we can access the fisrt field of the UT pair, but the OT can not give this access. Instead the OT could define some function accessors that inderectly will almost behave as the data member.
+
 [endsect]
 
 [endsect]
@@ -402,6 +416,22 @@
 [section Examples]
 [section Identifier]
 
+One of the use cases that were at the origin of this library was to be able to define different identifiers that can be stored on a ordered container.
+
+The following template IdentifierGenarator can be used for this propose
+
+ template <typename UT, typename Tag>
+ struct IdentifierGenarator
+ {
+ typedef boost::opaque::new_type<UT, Tag,
+ boost::mpl::vector<boost::opaque::using::less_than_comparable> type;
+ };
+
+The class can be used as follows
+
+ struct ConnectionIdentifierTag {};
+ typedef IdentifierGenarator<int, ConnectionIdentifierTag>::type ConnectionIdentifier;
+
 
 [endsect]
 [endsect]
@@ -494,24 +524,33 @@
 [section:new_class Class Template `new_class<>`]
 [/==========================================================================================]
 
+`new_class<>` wraps an underlying type providing the regular constructors and copy construction from the underlying type and all the convertibles to the the UT.
+
+Resuming:
+
+* Can instances of UT be explicitly converted to instances of OT? Yes
+* Can instances of convertible to UT be explicitly converted to instances of OT? Yes
+* Can instances of UT be implicitly converted to instances of OT? No
+* Can instances of OT be explicitly converted to instances of UT? No
+* Can instances of OT be implicitly converted to instances of UT? No
 
 
         template <
             typename Final,
- typename T,
- typename MetaMixinSeq=boost::mpl::vector0<>,
- typename Base=base_new_type
+ typename UT,
+ typename MetaMixinSeq,
+ typename Base
>
         class new_class : public linear_hierarchy<MetaMixinSeq, Final, Base>::type
         {
         public:
- typedef T underlying_type;
+ typedef UT underlying_type;
 
             template <typename W>
             explicit new_class(W v);
             new_class();
             new_class(const new_class & rhs);
- explicit new_class(T v);
+ explicit new_class(underlying_type v);
         protected:
             T val_;
             new_class & operator=(const new_class & rhs);
@@ -533,6 +572,13 @@
 
         };
 
+[*Requirements]
+
+* `UT` must be a model of a CopyCOnstructible and Assignable.
+* `Final` must be a model of FinalUnderlying.
+* `MetaMixinSeq` must be a model of FinalUnderlying: defaulted to the empty sequence.
+* `Base` is defaulted to the base class of all the new types `base_new_type`.
+
 
 [endsect]
 
@@ -549,6 +595,12 @@
>
         T opaque_static_cast(new_class<Final, UT, MetaMixinSeq, Base> const& v);
 
+[*Requirements]
+
+* `T` and `UT` must be a model of a CopyCOnstructible and Assignable.
+* `Final` must be a model of FinalUnderlying.
+* `MetaMixinSeq` must be a model of FinalUnderlying.
+
 [endsect]
 
 [endsect]
@@ -558,9 +610,9 @@
 
     namespace boost {
         template <
- typename T,
+ typename UT,
             typename Tag,
- typename Concepts=boost::mpl::vector0<>,
+ typename MetaMixinSeq=boost::mpl::vector0<>,
             typename Base=base_new_type>
         class new_type;
 
@@ -568,22 +620,31 @@
 [section:new_type Class Template `new_type<>`]
 [/==========================================================================================]
 
+`new_type<>` provides the equivalent of `new_class<>` but can be used as a typedef.
+
         template <
- typename T,
+ typename UT,
             typename Tag,
- typename Concepts,
+ typename MetaMixinSeq,
             typename Base
         class new_type
- : public new_class<new_type<T, Tag, Concepts, Base>, T, Concepts, Base>
+ : public new_class<new_type<UT, Tag, MetaMixinSeq, Base>, UT, MetaMixinSeq, Base>
         {
         public:
             template <typename W>
             explicit new_type(W v);
             new_type();
             new_type(const new_type & rhs);
- explicit new_type(T v);
+ explicit new_type(UT v);
         };
 
+[*Requirements]
+
+* `UT` must be a model of a CopyCOnstructible and Assignable.
+* `Tag` must be a unique class.
+* `MetaMixinSeq` must be a model of FinalUnderlying: defaulted to the empty sequence.
+* `Base` is defaulted to the base class of all the new types `base_new_type`.
+
 
 [endsect]
 
@@ -595,10 +656,10 @@
             typename T,
             typename UT,
             typename Tag,
- typename Concepts,
+ typename MetaMixinSeq,
             typename Base
>
- T opaque_static_cast(new_type<UT,Tag,Concepts,Base> const& v);
+ T opaque_static_cast(new_type<UT,Tag,MetaMixinSeq,Base> const& v);
 
 [endsect]
 
@@ -646,24 +707,20 @@
         class base_private_opaque_type;
         template <
             typename Final,
- typename T,
+ typename UT,
             typename MetaMixinSeq=boost::mpl::vector0<>,
             typename Base=base_private_opaque_type
>
         class private_opaque_class;
     }
 
-* Can instances of UT be explicitly converted to instances of OT? Yes
-* Can instances of UT be implicitly converted to instances of OT? No
-* Can instances of OT be explicitly converted to instances of UT? Yes.
-* Waiting for explicit conversion operators,, the explicit conversion must be done through the underlying function
-* Can instances of OT be implicitly converted to instances of UT? No
-
 
 [/==========================================================================================]
 [section:base_private_opaque_type Class `base_private_opaque_type`]
 [/==========================================================================================]
 
+This is the base class of all the private opaque types.
+
     class base_private_opaque_type {};
 
 [endsect]
@@ -672,18 +729,34 @@
 [section:private_opaque_class Class Template `private_opaque_class<>`]
 [/==========================================================================================]
 
+Resuming:
+
+* Can instances of UT be explicitly converted to instances of OT? Yes
+* Can instances of convertibles to UT be explicitly converted to instances of OT? Yes
+* Can instances of UT be implicitly converted to instances of OT? No
+* Can instances of OT be explicitly converted to instances of UT? Yes.
+* Can instances of OT be explicitly converted to instances of convertible to UT? Yes
+* Can instances of OT be implicitly converted to instances of UT? No
+* Can instances of OT be implicitly converted to instances of convertible to UT? No
+
+[note Waiting for explicit conversion operators, the explicit conversion must be done through the underlying function]
+
+`private_opaque_class<>` is a `new_class` with the `transitive_explicit_substituable<base_private_opaque_type>` and `inherited_from_underlying<UT>` added to the sequence of meta-mixins MetaMixinSeq, so a `private_opaque_class` inherits from all the operations of tye underlying type and adds transitive explicit conversions to all the substituables. The nested typedef `substituables` is the MPL sequence of all the UT in the opaque type hierarchy.
+
+
+
     template <
         typename Final,
- typename T,
+ typename UT,
         typename MetaMixinSeq,
         typename Base
>
     class private_opaque_class : public
- new_class< Final, T,
+ new_class< Final, UT,
                 mpl::push<
                     transitive_explicit_substituable<base_private_opaque_type>,
                     mpl::push<
- inherited_from_undelying<T>,
+ inherited_from_underlying<UT>,
                         MetaMixinSeq
>
>,
@@ -695,7 +768,7 @@
         private_opaque_class();
         private_opaque_class(const private_opaque_class & rhs);
         private_opaque_class(const Final & rhs);
- explicit private_opaque_class(T v);
+ explicit private_opaque_class(UT v);
         template <typename W>
         explicit private_opaque_class(W v);
     };
@@ -711,7 +784,7 @@
     namespace boost {
         template <
             typename Final,
- typename T,
+ typename UT,
             typename MetaMixinSeq=boost::mpl::vector0<>,
             typename Base=base_private_opaque_type
>
@@ -722,26 +795,34 @@
 [section:private_opaque_type Class Template `private_opaque_type<>`]
 [/==========================================================================================]
 
+`private_opaque_type<>` provides the equivalent of `private_opaque_class<>` but can be used as a typedef.
+
     template <
         typename Final,
- typename T,
+ typename UT,
         typename MetaMixinSeq,
         typename Base
>
     class private_opaque_type : public
         private_opaque_class<
- private_opaque_type<T,Tag,MetaMixinSeq,Base>, T, MetaMixinSeq, Base>
+ private_opaque_type<UT,Tag,MetaMixinSeq,Base>, UT, MetaMixinSeq, Base>
     {
     public:
 
         private_opaque_type();
         private_opaque_type(const private_opaque_class & rhs);
         private_opaque_type(const Final & rhs);
- explicit private_opaque_type(T v);
+ explicit private_opaque_type(UT v);
         template <typename W>
         explicit private_opaque_type(W v);
     };
 
+[*Requirements]
+
+* `UT` must be a model of a CopyCOnstructible and Assignable.
+* `Tag` must be a unique class.
+* `MetaMixinSeq` must be a model of FinalUnderlying: defaulted to the empty sequence.
+* `Base` is defaulted to the base class of all the new types `base_new_type`.
 
 
 [endsect]
@@ -759,22 +840,20 @@
 
         template <
             typename Final,
- typename T,
+ typename UT,
             typename MetaMixinSeq=boost::mpl::vector0<>,
             typename Base=base_public_opaque_type
>
         class public_opaque_class;
     }
 
-* Can instances of UT be explicitly converted to instances of OT? Yes
-* Can instances of UT be implicitly converted to instances of OT? No
-* Can instances of OT be explicitly converted to instances of UT? Yes
-* Can instances of OT be implicitly converted to instances of UT? Yes
 
 [/==========================================================================================]
 [section:private_opaque_class Class `base_public_opaque_type`]
 [/==========================================================================================]
 
+This is the base class of all the public opaque types.
+
         class base_public_opaque_type {};
 
 [endsect]
@@ -787,24 +866,38 @@
             typedef <see below> type;
         }
 
+The nested typedef `type` is an MPL sequence of all the UT in the opaque type hierarchy.
+
 [endsect]
 
 [/==========================================================================================]
 [section:public_opaque_class Class Template `public_opaque_class<>`]
 [/==========================================================================================]
 
+Resuming:
+
+* Can instances of UT be explicitly converted to instances of OT? Yes
+* Can instances of UT be implicitly converted to instances of OT? No
+* Can instances of OT be explicitly converted to instances of UT? Yes
+* Can instances of OT be explicitly converted to instances of convertible to UT? Yes
+* Can instances of OT be implicitly converted to instances of UT? Yes
+* Can instances of OT be implicitly converted to instances of convertible to UT? Yes
+
+`public_opaque_class<>` is a `new_class` with the `transitive_substituable<base_public_opaque_type>` and `inherited_from_underlying<UT>` added to the sequence of meta-mixins MetaMixinSeq, so a public_opaque_type inherits from all the operations of tye underlying type and adds transitive implicit conversions to all the substituables. The nested typedef `substituables` is the MPL sequence of all the UT in the opaque type hierarchy.
+
+
         template <
             typename Final,
- typename T,
+ typename UT,
             typename MetaMixinSeq=boost::mpl::vector0<>,
             typename Base=base_public_opaque_type
>
         class public_opaque_class
- : public new_class< Final, T,
+ : public new_class< Final, UT,
                 mpl::push<
                     transitive_substituable<base_public_opaque_type>,
                     mpl::push<
- inherited_from_undelying<T>,
+ inherited_from_underlying<UT>,
                         MetaMixinSeq
>
>,
@@ -817,13 +910,14 @@
             public_opaque_class();
             public_opaque_class(const public_opaque_class & rhs);
             public_opaque_class(const Final & rhs);
- explicit public_opaque_class(T v);
+ explicit public_opaque_class(UT v);
             template <typename W>
             explicit public_opaque_class(W v);
 
         };
+
 [endsect]
-
+
 
 [endsect]
 
@@ -834,7 +928,7 @@
     namespace boost {
         template <
             typename Final,
- typename T,
+ typename UT,
             typename MetaMixinSeq=boost::mpl::vector0<>,
             typename Base=base_public_opaque_type
>
@@ -845,26 +939,35 @@
 [section:public_opaque_type Class Template `public_opaque_type<>`]
 [/==========================================================================================]
 
+`private_opaque_typublic_opaque_typepe<>` provides the equivalent of `public_opaque_class<>` but can be used as a typedef.
+
     template <
         typename Final,
- typename T,
+ typename UT,
         typename MetaMixinSeq,
         typename Base
>
     class public_opaque_type : public
         public_opaque_class<
- public_opaque_type<T,Tag,MetaMixinSeq,Base>, T, MetaMixinSeq, Base>
+ public_opaque_type<UT,Tag,MetaMixinSeq,Base>, UT, MetaMixinSeq, Base>
     {
     public:
 
         public_opaque_type();
         public_opaque_type(const public_opaque_type & rhs);
         public_opaque_type(const Final & rhs);
- explicit public_opaque_type(T v);
+ explicit public_opaque_type(UT v);
         template <typename W>
         explicit public_opaque_type(W v);
     };
 
+[*Requirements]
+
+* `UT` must be a model of a CopyCOnstructible and Assignable.
+* `Tag` must be a unique class.
+* `MetaMixinSeq` must be a model of FinalUnderlying: defaulted to the empty sequence.
+* `Base` is defaulted to the base class of all the new types `base_new_type`.
+
 [endsect]
 [endsect]
 
@@ -932,7 +1035,7 @@
         ...
     };
 
-The Final class must make the following
+The `Final` class must satisfy the `FinalUnderlying` requirements.
 
 [endsect]
 
@@ -950,6 +1053,8 @@
         };
     };
 
+The `Final` class must satisfy the `FinalUnderlying` requirements.
+
 [endsect]
 
 [/==========================================================================================]
@@ -963,7 +1068,7 @@
 [endsect]
 
 [/==========================================================================================]
-[section:linear_hierarchy_hpp Header `<boost/opaque/metamixin/linear_hierarchy.hpp>`]
+[section:linear_hierarchy_hpp Header `<boost/opaque/meta_mixin/linear_hierarchy.hpp>`]
 [/==========================================================================================]
 
     namespace boost {
@@ -988,27 +1093,27 @@
 [endsect]
 
 [/==========================================================================================]
-[section:inherited_from_undelying_hpp Header `<boost/opaque/metamixin/inherited_from_undelying.hpp>`]
+[section:inherited_from_underlying_hpp Header `<boost/opaque/meta_mixin/inherited_from_underlying.hpp>`]
 [/==========================================================================================]
 
     namespace boost {
         template <typename T, typename Bool=bool>
- struct inherited_from_undelying;
+ struct inherited_from_underlying;
     }
 
 [/==========================================================================================]
-[section:inherited_from_undelying Class Template `inherited_from_undelying<>`]
+[section:inherited_from_underlying Class Template `inherited_from_underlying<>`]
 [/==========================================================================================]
 
         template <typename T, typename Bool>
- struct inherited_from_undelying;
+ struct inherited_from_underlying;
 
-`inherited_from_undelying` is a `MetaMixin` which adds wrapping member to the underlyibg type `UT`.
+`inherited_from_underlying` is a `MetaMixin` which adds wrapping member to the underlyibg type `UT`.
 
 This class must specialized for specific types in order to make easier the construction of opaque types having `UT` as underlying type. For example the library provide specializations for each one of the buil-in types.
 
     template <typename Bool>
- struct inherited_from_undelying<int> {
+ struct inherited_from_underlying<int> {
         template <typename Final, typename Base>
         struct type; //implementation defined
     };
@@ -1017,7 +1122,7 @@
 [endsect]
 
 [/==========================================================================================]
-[section:using_operators_hpp Header `<boost/opaque/metamixin/using_operators.hpp>`]
+[section:using_operators_hpp Header `<boost/opaque/meta_mixin/using_operators.hpp>`]
 [/==========================================================================================]
 
 This file includes meta-mixins that are used to add un operator overloads forwarding from the Final type to the underlying type. There is a meta-mixins for each one of the C++ overloadable operators.
@@ -1029,7 +1134,7 @@
 
 The arithmetic meta-mixins ease the task of creating a custom numeric type based on the underlying type. Given an underlying type, the templates add forward operators from the numeric class to the underlying type. These operations are like the ones the standard arithmetic types have, and may include comparisons, adding, incrementing, logical and bitwise manipulations, etc. Further, since most numeric types need more than one of these operators, some templates are provided to combine several of the basic operator templates in one declaration.
 
-The requirements for the types used to instantiate the simple operator templates are specified in terms of expressions which must be valid and the expression's return type.
+The requirements for the types used to instantiate the simple operator templates are specified in terms of expressions which must be valid and the expression's return type.
 
 
 These meta-mixins are "simple" since they provide un operator based on a single operation the underlying type has to provide. They have an additional optional template parameter Base, which is not shown, for the base class chaining technique.
@@ -1052,60 +1157,147 @@
 * lhs_ut is the instance UT reference obtained lhs.underlying()
 * rhs_ut is the instance UT reference obtained rhs.underlying()
 
-[table
+
+[table Relational operators
     [[Meta-Mixin] [Supplied Operation] [Requirements] [Ref]]
- [[`using_underlying_conversion<UT>`][`operator UT() const`][None][12.3.2]]
- [[`using_conversion_to<T>`][`operator T() const`][`T(ut)`][12.3.2]]
- [[`using_safe_bool_conversion`][`operator unspecified_bool_type() const`][`ut?true:false`][12.3.2]]
-
- [[`using_logical_not<Bool>`][`Bool operator!=() const`][`Bool(!this_ut)`][13.5.1]]
- [[`using_unary_plus`][`NT operator+() const`][`NT(+this_ut)`][13.5.1]]
- [[`using_unary_minus`][`NT operator-() const`][`NT(-this_ut)`][13.5.1]]
- [[`using_bitwise_not`][`NT operator~() const`][`NT(~this_ut)`][13.5.1]]
 
- [[`using_pre_increment`][`NT& operator++()`][`++this_ut`][13.5.1]]
- [[`using_pre_decrement`][`NT& operator--()`][`--this_ut`][13.5.1]]
- [[`using_post_increment`][`NT operator++(int) const`][`this_ut++`][13.5.1]]
- [[`using_post_decrement`][`NT operator--(int) const`][`this_ut++`][13.5.1]]
-
+ [[`using_equal<Bool>`][`Bool operator==(const NT& rhs) const`][`Bool(this_ut == rhs_ut)`][13.5.2] ]
+ [[`using_not_equal<Bool>`][`Bool operator!=(const NT& rhs) const`][`Bool(this_ut != rhs_ut)`][13.5.2] ]
+
     [[`using_less_than<Bool>`][`Bool operator<(const NT& rhs) const`][`Bool(this_ut < rhs_ut)`][13.5.2]]
     [[`using_less_than_equal<Bool>`][`Bool operator<=(const NT& rhs) const`][`Bool(this_ut <= rhs_ut)`][13.5.2]]
     [[`using_greater_than_equal<Bool>`][`Bool operator>=(const NT& rhs) const`][`Bool(this_ut >= rhs_ut)`][13.5.2]]
     [[`using_greater_than<Bool>`][`Bool operator>(const NT& rhs) const`][`Bool(this_ut > rhs_ut)`][13.5.2] ]
- [[`using_equal<Bool>`][`Bool operator==(const NT& rhs) const`][`Bool(this_ut == rhs_ut)`][13.5.2] ]
- [[`using_not_equal<Bool>`][`Bool operator!=(const NT& rhs) const`][`Bool(this_ut != rhs_ut)`][13.5.2] ]
 
+ [[`using_equal2<NT2, Bool>`][`Bool operator==(const NT2& rhs) const`][`Bool(this_ut == rhs_ut)`][13.5.2] ]
+ [[`using_not_equal2<NT2, Bool>`][`Bool operator!=(const NT2& rhs) const`][`Bool(this_ut != rhs_ut)`][13.5.2] ]
+ [[`using_less_than2<NT2, Bool>`][`Bool operator<(const NT& rhs) const`][`Bool(this_ut < rhs_ut)`][13.5.2]]
+ [[`using_less_than_equal2<NT2, Bool>`][`Bool operator<=(const NT2& rhs) const`][`Bool(this_ut <= rhs_ut)`][13.5.2]]
+ [[`using_greater_than_equal2<NT2, Bool>`][`Bool operator>=(const NT2& rhs) const`][`Bool(this_ut >= rhs_ut)`][13.5.2]]
+ [[`using_greater_than2<NT2, Bool>`][`Bool operator>(const NT2& rhs) const`][`Bool(this_ut > rhs_ut)`][13.5.2] ]
 
+]
+
+[table Numeric operators
+ [[Meta-Mixin] [Supplied Operation] [Requirements] [Ref]]
+
+ [[`using_plus`][`NT operator+(const NT& rhs) const`][`NT(this_ut + rhs_ut)`][13.5.2]]
     [[`using_plus_assign`][`NT& operator+=(const NT& rhs)`][`this_ut += rhs_ut`][13.5.2]]
+ [[`using_minus`][`NT operator-(const NT& rhs) const`][`NT(this_ut - rhs_ut)`][13.5.2]]
     [[`using_minus_assign`][`NT& operator-=(const NT& rhs)`][`this_ut -= rhs_ut`][13.5.2]]
+ [[`using_multiply`][`NT operator*(const NT& rhs) const`][`NT(this_ut * rhs_ut)`][13.5.2]]
     [[`using_multiply_assign`][`NT& operator*=(const NT& rhs)`][`this_ut *= rhs_ut`][13.5.2]]
+ [[`using_divide`][`NT operator/(const NT& rhs) const`][`NT(this_ut / rhs_ut)`][13.5.2]]
     [[`using_divide_assign`][`NT& operator/=(const NT& rhs)`][`this_ut /= rhs_ut`][13.5.2]]
+ [[`using_modulus`][`NT operator%(const NT& rhs) const`][`NT(this_ut % rhs_ut)`][13.5.2]]
     [[`using_modulus_assign`][`NT& operator%=(const NT& rhs)`][`this_ut %= rhs_ut`][13.5.2]]
+ [[`using_unary_plus`][`NT operator+() const`][`NT(+this_ut)`][13.5.1]]
+ [[`using_unary_minus`][`NT operator-() const`][`NT(-this_ut)`][13.5.1]]
+ [[`using_pre_increment`][`NT& operator++()`][`++this_ut`][13.5.1]]
+ [[`using_pre_decrement`][`NT& operator--()`][`--this_ut`][13.5.1]]
+ [[`using_post_increment`][`NT operator++(int) const`][`this_ut++`][13.5.1]]
+ [[`using_post_decrement`][`NT operator--(int) const`][`this_ut++`][13.5.1]]
+ [[`using_plus2<NT2>`][`NT operator+(const NT2& rhs) const`][`NT(this_ut + rhs_ut)`][13.5.2]]
+ [[`using_plus_assign2<NT2>`][`NT& operator+=(const NT2& rhs)`][`this_ut += rhs_ut`][13.5.2]]
+ [[`using_minus2<NT2>`][`NT operator-(const NT2& rhs) const`][`NT(this_ut - rhs_ut)`][13.5.2]]
+ [[`using_minus_assign2<NT2>`][`NT& operator-=(const NT2& rhs)`][`this_ut -= rhs_ut`][13.5.2]]
+ [[`using_multiply2<NT2>`][`NT operator*(const NT2& rhs) const`][`NT(this_ut * rhs_ut)`][13.5.2]]
+ [[`using_multiply_assign2<NT2>`][`NT& operator*=(const NT2& rhs)`][`this_ut *= rhs_ut`][13.5.2]]
+ [[`using_divide2<NT2>`][`NT operator/(const NT2& rhs) const`][`NT(this_ut / rhs_ut)`][13.5.2]]
+ [[`using_divide_assign2<NT2>`][`NT& operator/=(const NT2& rhs)`][`this_ut /= rhs_ut`][13.5.2]]
+ [[`using_modulus2<NT2>`][`NT operator%(const NT2& rhs) const`][`NT(this_ut % rhs_ut)`][13.5.2]]
+ [[`using_modulus_assign2<NT2>`][`NT& operator%=(const NT2& rhs)`][`this_ut %= rhs_ut`][13.5.2]]
+]
+
+[table Bitwise operators
+ [[Meta-Mixin] [Supplied Operation] [Requirements] [Ref]]
+ [[`using_bitwise_not`][`NT operator~() const`][`NT(~this_ut)`][13.5.1]]
     [[`using_bitwise_xor_assign`][`NT& operator^=(const NT& rhs)`][`this_ut ^= rhs_ut`][13.5.2]]
     [[`using_bitwise_and_assign`][`NT& operator&=(const NT& rhs)`][`this_ut &= rhs_ut`][13.5.2]]
     [[`using_bitwise_or_assign`][`NT& operator|=(const NT& rhs)`][`this_ut |= rhs_ut`][13.5.2]]
     [[`using_left_right_assign`][`NT& operator<<=(const NT& rhs)`][`this_ut <<= rhs_ut`][13.5.2]]
     [[`using_right_shift_assign`][`NT& operator>>=(const NT& rhs)`][`this_ut >>= rhs_ut`][13.5.2]]
-
-
- [[`using_plus`][`NT operator+(const NT& rhs) const`][`NT(this_ut + rhs_ut)`][13.5.2]]
- [[`using_minus`][`NT operator-(const NT& rhs) const`][`NT(this_ut - rhs_ut)`][13.5.2]]
- [[`using_multiply`][`NT operator*(const NT& rhs) const`][`NT(this_ut * rhs_ut)`][13.5.2]]
- [[`using_divide`][`NT operator/(const NT& rhs) const`][`NT(this_ut / rhs_ut)`][13.5.2]]
- [[`using_modulus`][`NT operator%(const NT& rhs) const`][`NT(this_ut % rhs_ut)`][13.5.2]]
     [[`using_bitwise_xor`][`NT operator^(const NT& rhs) const`][`NT(this_ut ^ rhs_ut)`][13.5.2]]
     [[`using_bitwise_or`][`NT operator|(const NT& rhs) const`][`NT(this_ut | rhs_ut)`][13.5.2]]
     [[`using_bitwise_and`][`NT operator&(const NT& rhs) const`][`NT(this_ut & rhs_ut)`][13.5.2]]
     [[`using_left_shift1`][`NT operator<<(const NT& rhs) const`][`NT(this_ut << rhs_ut)`][13.5.2]]
     [[`using_right_shift1`][`NT operator>>(const NT& rhs) const`][`NT(this_ut >> rhs_ut)`][13.5.2]]
 
+
+ [[`using_bitwise_xor2<NT2>`][`NT operator^(const NT2& rhs) const`][`NT(this_ut ^ rhs_ut)`][13.5.2]]
+ [[`using_bitwise_xor_assign2<NT2>`][`NT& operator^=(const NT2& rhs)`][`this_ut ^= rhs_ut`][13.5.2]]
+ [[`using_bitwise_or2<NT2>`][`NT operator|(const NT2& rhs) const`][`NT(this_ut | rhs_ut)`][13.5.2]]
+ [[`using_bitwise_and2<NT2>`][`NT operator&(const NT2& rhs) const`][`NT(this_ut & rhs_ut)`][13.5.2]]
+ [[`using_bitwise_and_assign2<NT2>`][`NT& operator&=(const NT2& rhs)`][`this_ut &= rhs_ut`][13.5.2]]
+ [[`using_bitwise_or_assign2<NT2>`][`NT& operator|=(const NT2& rhs)`][`this_ut |= rhs_ut`][13.5.2]]
+ [[`using_left_shift2<NT2>`][`NT operator<<(const NT2& rhs) const`][`NT(this_ut << rhs_ut)`][13.5.2]]
+ [[`using_left_right_assign2<NT2>`][`NT& operator<<=(const NT2& rhs)`][`this_ut <<= rhs_ut`][13.5.2]]
+ [[`using_right_shift2<NT2>`][`NT operator>>(const NT2& rhs) const`][`NT(this_ut >> rhs_ut)`][13.5.2]]
+ [[`using_right_shift_assign2<NT2>`][`NT& operator>>=(const NT2& rhs)`][`this_ut >>= rhs_ut`][13.5.2]]
+
 ]
 
 [endsect]
+
+[section Logical Operators]
+
+[table Logical operators
+ [[Meta-Mixin] [Supplied Operation] [Requirements] [Ref]]
+
+ [[`using_logical_not<Bool>`][`Bool operator!() const`][`Bool(!this_ut)`][13.5.1]]
+ [[`using_logical_and<Bool>`][`Bool operator&&(const NT& rhs) const`][`Bool(this_ut && rhs_ut)`][13.5.2]]
+ [[`using_logical_or<Bool>`][`Bool operator||(const NT& rhs) const`][`Bool(this_ut || rhs_ut)`][13.5.2]]
+]
+
+[endsect]
+
+[section Conversion Operators]
+
+[table Conversion Operators
+ [[Meta-Mixin] [Supplied Operation] [Requirements] [Ref]]
+
+ [[`using_underlying_conversion<UT>`][`operator UT() const`][None][12.3.2]]
+ [[`using_conversion_to<T>`][`operator T() const`][`T(ut)`][12.3.2]]
+ [[`using_safe_bool_conversion`][`operator unspecified_bool_type() const`][`ut?true:false`][12.3.2]]
+
+]
+
+[endsect]
+
+[section Dereference Operators]
+
+[table Dereference Operators
+ [[Meta-Mixin] [Supplied Operation] [Requirements] [Ref]]
+
+ [[`using_address_of`][`NT& operator&()`][??][]]
+ [[`using_address_of2<A>`][`A operator&()`][??][]]
+ [[`using_derreference`][`NT& operator*()`][??][]]
+ [[`using_derreference<R>`][`R operator*()`][??][]]
+ [[`using_member_access<P>`][`P operator->()`][??][]]
+ [[`using_subscript<D,T>`][`T operator[](D)`][??][]]
+
+]
+
+[endsect]
+
+
+[section Other Operators]
+
+[table
+ [[Meta-Mixin] [Supplied Operation] [Requirements] [Ref]]
+
+ [[`using_comma`][`NT operator,()`][??][]]
+ [[`using_function_call`][`operator()()`][??][]]
+ [[`using_pointer_to_member`][`operator->*()`][??][]]
+
+]
+
+[endsect]
+
 [endsect]
 
 [/==========================================================================================]
-[section:hiding_operators_hpp Header `<boost/opaque/metamixin/hiding_operators.hpp>`]
+[section:hiding_operators_hpp Header `<boost/opaque/meta_mixin/hiding_operators.hpp>`]
 [/==========================================================================================]
 
 This file includes meta-mixins that are used to hide operator overloads that have been defined by a base class for each one of the C++ overloadable operators.
@@ -1114,14 +1306,14 @@
 
 [table
     [[Meta-Mixin] [Hidden Operation] [Requirements] [Ref]]
- [[`hiding_assign`][`NT& operator=(NT const&)`][None][13.5.3]]
- [[`hiding_copy`][`NT(NT const&)`][None][13.5.3]]
+ [[`hiding_assignment`][`NT& operator=(NT const&)`][None][13.5.3]]
+ [[`hiding_copy_constructor`][`NT(NT const&)`][None][13.5.3]]
 ]
 
 [endsect]
 
 [/==========================================================================================]
-[section:using_combined_operators_hpp Header `<boost/opaque/metamixin/using_combined_operators.hpp>`]
+[section:using_combined_operators_hpp Header `<boost/opaque/meta_mixin/using_combined_operators.hpp>`]
 [/==========================================================================================]
 
 This file includes meta-mixins combining several operators.
@@ -1130,6 +1322,10 @@
 
 The composite operator templates only list what other templates they use. The supplied operations and requirements of the composite operator templates can be inferred from the operations and requirements of the listed components.
 
+Grouped Arithmetic Operators
+
+The following meta-mixins provide common groups of related meta-mixins. For example, since a type which is addable is usually also subractable, the additive template provides the combined meta-mixins of both.
+
 [table
     [[Meta-Mixin] [Meta-Mixin Sequence] [Ref]]
     [[`using_equality_comparable1<Bool>`][`using_equal<Bool>`,
@@ -1229,7 +1425,7 @@
 
 [endsect]
 [/==========================================================================================]
-[section:hiding_combined_operators_hpp Header `<boost/opaque/metamixin/hiding_combined_operators.hpp>`]
+[section:hiding_combined_operators_hpp Header `<boost/opaque/meta_mixin/hiding_combined_operators.hpp>`]
 [/==========================================================================================]
 
 This file includes meta-mixins combining several hiding meta-mixins that are used to hide operator overloads that have been defined by a base clas.
@@ -1239,7 +1435,7 @@
 [endsect]
 
 [/==========================================================================================]
-[section:transitive_substituable_hpp Header `<boost/opaque/metamixin/transitive_substituable.hpp>`]
+[section:transitive_substituable_hpp Header `<boost/opaque/meta_mixin/transitive_substituable.hpp>`]
 [/==========================================================================================]
 
     namespace boost {
@@ -1251,7 +1447,7 @@
 [section:transitive_substituable Class Template `transitive_substituable<>`]
 [/==========================================================================================]
 
-This metamixin provides the Final class implicit conversions for all the underlying types hierarchy.
+This meta-mixin provides the Final class implicit conversions for all the underlying types hierarchy.
 
         template <typename BaseClass, typename UT>
         struct transitive_substituable;
@@ -1261,7 +1457,7 @@
 [endsect]
 
 [/==========================================================================================]
-[section:transitive_explicit_substituable_hpp Header `<boost/opaque/metamixin/transitive_explicit_substituable.hpp>`]
+[section:transitive_explicit_substituable_hpp Header `<boost/opaque/meta_mixin/transitive_explicit_substituable.hpp>`]
 [/==========================================================================================]
 
     namespace boost {
@@ -1276,10 +1472,7 @@
         template <typename BaseClass, typename UT>
         struct transitive_explicit_substituable;
 
-This metamixin provides the Final class explicit conversions for all the underlying types hierarchy (when the compiler supports explicit conversion operators). For portability purposed the library provide as workarround a convert_to non member function.
-
- template <typename BaseClass, typename UT>
- struct transitive_explicit_substituable;
+This meta-mixin provides the Final class explicit conversions for all the underlying types hierarchy (when the compiler supports explicit conversion operators). For portability purposed the library provide as workarround a convert_to non member function.
 
 
 [endsect]
@@ -1327,13 +1520,96 @@
 [endsect]
 [section Appendix E: Tests]
 
-[section Builtins]
+[section new_class]
+
+[table Contructors and Assignement
+ [[Name] [kind] [Description] [Result]]
+ [[regular_pass] [run] [check constructors and assignements] [Pass] ]
+ [[assign_siblings_fail] [compile-fail] [check siblings assignement fail] [Pass] ]
+ [[assign_up_fail] [compile-fail] [check NT can not be assigned to UT] [Pass] ]
+ [[assign_down_fail] [compile-fail] [check UT can not be assigned to NT] [Pass] ]
+ [[copy_construct_from_non_convertible_fail] [compile-fail] [check constructor from non convertibe to UT fails] [Pass] ]
+]
+
+[table Relational Operators
+ [[Name] [kind] [Description] [Result]]
+
+ [[using_equal_pass] [run] [check `oparator==` is available when adding `using_equal` meta-mixin] [Pass] ]
+ [[using_not_equal_pass] [run] [check `oparator!=` is available when adding `using_not_equal` meta-mixin] [Pass] ]
+ [[using_less_than_pass] [run] [check `oparator<` is available when adding `using_less_than` meta-mixin] [Pass] ]
+ [[using_less_than_equal_pass] [run] [check `oparator<=` is available when adding `using_less_than_equal` meta-mixin] [Pass] ]
+ [[using_greater_than_pass] [run] [check `oparator>` is available when adding `using_greater_than` meta-mixin] [Pass] ]
+ [[using_greater_than_equal_pass] [run] [check `oparator>=` is available when adding `using_greater_than_equal` meta-mixin] [Pass] ]
+ [[equal_fail] [compile-fail] [check check `oparator==` fail on default new_class] [Pass] ]
+ [[not_equal_fail] [compile-fail] [check check `oparator!=` fail on default new_class] [Pass] ]
+ [[less_than_equal_fail] [compile-fail] [check check `oparator<=` fail on default new_class] [Pass] ]
+ [[less_than_fail] [compile-fail] [check check `oparator<` fail on default new_class] [Pass] ]
+ [[greater_than_equal_fail] [compile-fail] [check check `oparator>=` fail on default new_class] [Pass] ]
+ [[greater_than_fail] [compile-fail] [check check `oparator>` fail on default new_class] [Pass] ]
+
+]
+
+[table Arithmetic Operators
+ [[Name] [kind] [Description] [Result]]
+
+ [[using_plus_pass] [run] [check `oparator+` is available when adding `using_plus` meta-mixin] [Pass] ]
+ [[using_plus_assign_pass] [run] [check `oparator+=` is available when adding `using_plus_assign` meta-mixin] [Pass] ]
+ [[using_minus_pass] [run] [check `oparator-` is available when adding `using_minus` meta-mixin] [Pass] ]
+ [[using_minus_assign_pass] [run] [check `oparator-=` is available when adding `using_minus_assign` meta-mixin] [Pass] ]
+ [[using_multiply_pass] [run] [check `oparator*` is available when adding `using_multiply` meta-mixin] [Pass] ]
+ [[using_multiply_assign_pass] [run] [check `oparator*=` is available when adding `using_multiply_assign` meta-mixin] [Pass] ]
+ [[using_divide_pass] [run] [check `oparator/` is available when adding `using_divide` meta-mixin] [Pass] ]
+ [[using_divide_assign_pass] [run] [check `oparator/=` is available when adding `using_divide_assign` meta-mixin] [Pass] ]
+ [[using_modulus_pass] [run] [check `oparator%` is available when adding `using_modulus` meta-mixin] [Pass] ]
+ [[using_modulus_assign_pass] [run] [check `oparator%=` is available when adding `using_modulus_assign` meta-mixin] [Pass] ]
+ [[using_unary_plus_pass] [run] [check `oparator+()` is available when adding `using_unary_plus` meta-mixin] [Pass] ]
+ [[using_unary_minus_pass] [run] [check `oparator-()` is available when adding `using_unary_minus` meta-mixin] [Pass] ]
+ [[using_pre_increment_pass] [run] [check `oparator++()` is available when adding `using_pre_increment` meta-mixin] [Pass] ]
+ [[using_post_increment_pass] [run] [check `oparator++(int)` is available when adding `using_post_increment` meta-mixin] [Pass] ]
+ [[using_pre_decrement_pass] [run] [check `oparator--()` is available when adding `using_pre_decrement` meta-mixin] [Pass] ]
+ [[using_post_decrement_pass] [run] [check `oparator--(int)` is available when adding `using_post_decrement` meta-mixin] [Pass] ]
+]
+
+[table Bitwise Operators
+ [[Name] [kind] [Description] [Result]]
+ [[using_bitwise_not_pass] [run] [check `oparator~` is available when adding `using_bitwise_not` meta-mixin] [Pass] ]
+ [[using_bitwise_xor_pass] [run] [check `oparator^` is available when adding `using_bitwise_xor` meta-mixin] [Pass] ]
+ [[using_bitwise_xor_assign_pass] [run] [check `oparator^=` is available when adding `using_bitwise_xor_assign` meta-mixin] [Pass] ]
+ [[using_bitwise_or_pass] [run] [check `oparator|` is available when adding `using_bitwise_or` meta-mixin] [Pass] ]
+ [[using_bitwise_or_assign_pass] [run] [check `oparator|=` is available when adding `using_bitwise_or_assign` meta-mixin] [Pass] ]
+ [[using_bitwise_and_pass] [run] [check `oparator&` is available when adding `using_bitwise_and` meta-mixin] [Pass] ]
+ [[using_bitwise_and_assign_pass] [run] [check `oparator&=` is available when adding `using_bitwise_and_assign` meta-mixin] [Pass] ]
+
+ [[using_left_shift_pass] [run] [check `oparator<<` is available when adding `using_left_shift` meta-mixin] [Pass] ]
+ [[using_left_shift_assign_pass] [run] [check `oparator<<=` is available when adding `using_left_shift_assign` meta-mixin] [Pass] ]
+ [[using_right_shift_pass] [run] [check `oparator>>` is available when adding `using_right_shift` meta-mixin] [Pass] ]
+ [[using_right_shift_assign_pass] [run] [check `oparator>>=` is available when adding `using_right_shift_assign` meta-mixin] [Pass] ]
+]
+
+[table Logical Operators
+ [[Name] [kind] [Description] [Result]]
+
+ [[using_logical_not_pass] [run] [check `oparator!` is available when adding `using_logical_not` meta-mixin] [Pass] ]
+ [[using_logical_and_pass] [run] [check `oparator&&` is available when adding `using_logical_and` meta-mixin] [Pass] ]
+ [[using_logical_or_pass] [run] [check `oparator||` is available when adding `using_logical_and` meta-mixin] [Pass] ]
+
+]
+
+[endsect]
+
+[section new_type]
 [table
- [[Name] [kind] [Description] [Result] [Ticket]]
- [[convert_to_with_builtin_types] [run] [check `convert_to` works for builting types] [Pass] [#]]
+ [[Name] [kind] [Description] [Result] ]
+ [[regular.pass] [run] [check constructors and assignements] [Pass] ]
 ]
 [endsect]
 
+[section public_opaque_class]
+[table
+ [[Name] [kind] [Description] [Result] ]
+ [[regular.pass] [run] [check constructors and assignements] [Pass] ]
+]
+[endsect]
 
 [endsect]
 [section Appendix F: Tickets]
@@ -1346,11 +1622,12 @@
 
 [heading Tasks to do before review]
 
-* lala
+* Complete the tests
+* Add hiding meta-mixins
 
-[heading For later releases]
+[/heading For later releases]
 
-* lala
+
 
 [endsect]
 [endsect]


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk