Imported Upstream version 1.72.0
[platform/upstream/boost.git] / libs / contract / doc / html / contract.docbook
index 82f7cdc..ef1479b 100644 (file)
@@ -1,12 +1,12 @@
 <?xml version="1.0"?>
 <!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
-<chapter xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" id="boost_contract" rev:last-revision="$Date: 2019/08/14 12:07:23 $">
+<chapter xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" id="boost_contract" rev:last-revision="$Date: 2019/12/10 00:23:48 $">
   <chapterinfo><author>
       <firstname>Lorenzo</firstname> <surname>Caminiti <email>lorcaminiti@gmail.com</email></surname>
     </author><copyright>
       <year>2008</year> <year>2009</year> <year>2010</year> <year>2011</year> <year>2012</year>
       <year>2013</year> <year>2014</year> <year>2015</year> <year>2016</year> <year>2017</year>
-      <year>2018</year> <holder>Lorenzo Caminiti</holder>
+      <year>2018</year> <year>2019</year> <holder>Lorenzo Caminiti</holder>
     </copyright><legalnotice id="boost_contract.legal">
       <para>
         Distributed under the Boost Software License, Version 1.0 (see accompanying
@@ -76,7 +76,7 @@
       that <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">x</phrase></computeroutput> had before executing
       the function (indicated here by <literal moreinfo="none"><emphasis>oldof</emphasis></literal><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">(</phrase><phrase role="identifier">x</phrase><phrase role="special">)</phrase></computeroutput>).
       Note that postconditions shall be checked only when the execution of the function
-      body did not throw an exception.
+      body does not throw an exception.
     </para>
     <para>
       Now let's program this function and its contract using this library (see <ulink url="../../example/features/introduction.cpp"><literal moreinfo="none">introduction.cpp</literal></ulink>
         so it easy to check by visual inspection that it does not contain any bug
         and it will always increment <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">x</phrase></computeroutput>
         by <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="number">1</phrase></computeroutput> thus the function postcondition
-        will never fail. In real code, function bodies are rarely this simple and
-        can hide bugs which makes checking postconditions useful.
+        will never fail. In real production code, function bodies are rarely this
+        simple and can hide bugs which make checking postconditions useful.
       </para>
       </footnote>
     </para>
     <note>
       <para>
         C++11 lambda functions are necessary to use this library without manually
-        writing a significant amount of boiler-plate code to program the functors
-        that assert the contracts (see <link linkend="boost_contract.extras.no_lambda_functions__no_c__11_">No
+        writing a significant amount of boiler-plate code to program functors that
+        assert the contracts (see <link linkend="boost_contract.extras.no_lambda_functions__no_c__11_">No
         Lambda Functions</link>). That said, this library implementation does not
         use C++11 features and should work on most modern C++ compilers (see <link linkend="boost_contract.getting_started">Getting Started</link>).
       </para>
       <para>
         The <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">pushable</phrase></computeroutput> base class is
         used in this example just to show subcontracting, it is somewhat arbitrary
-        and it will likely not appear in real code.
+        and it will likely not appear in real production code.
       </para>
       </footnote>
     </para>
       etc.).
     </para>
     <para>
-      Unfortunately, detailed and complete proposals to add contracts to the C++
-      standard such as <link linkend="N1962_anchor">[N1962]</link> were rejected
-      by the C++ standard committee and it is not clear if the current proposal for
-      adding contracts to C++ <link linkend="P0380_anchor">[P0380]</link> will actually
-      be accepted by the standard. <footnote id="boost_contract.introduction.f3">
-      <para>
-        The authors find attractive the syntax that uses C++11 attributes <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">[[...]]</phrase></computeroutput> to specify contracts as indicated
-        in <link linkend="P0380_anchor">[P0380]</link>.
-      </para>
-      </footnote> In any case, at least for now <link linkend="P0380_anchor">[P0380]</link>
-      only supports pre- and postconditions while missing basic features such as
-      class invariants and old values in postconditions, not to mention the lack
-      of more advanced features like subcontracting. All these features are instead
-      supported by this library (see <link linkend="boost_contract.contract_programming_overview.feature_summary">Feature
+      The <link linkend="P0380_anchor">[P0380]</link> proposal supports basic contract
+      programming, it was accepted and it will be included in C++20. This is undoubtedly
+      a step in the right direction, but unfortunately <link linkend="P0380_anchor">[P0380]</link>
+      only supports pre- and postconditions while missing important features such
+      as class invariants and old values in postconditions, not to mention the lack
+      of more advanced features like subcontracting (more complete proposals like
+      <link linkend="N1962_anchor">[N1962]</link> were rejected by the C++ standard
+      committee). All contracting programming features are instead supported by this
+      library (see <link linkend="boost_contract.contract_programming_overview.feature_summary">Feature
       Summary</link> for a detailed comparison between the features supported by
       this library and the ones listed in different contract programming proposals,
       see <link linkend="boost_contract.bibliography">Bibliography</link> for a list
     <link linkend="boost_contract.getting_started.this_documentation">This Documentation</link>
     <link linkend="boost_contract.getting_started.compilers_and_platforms">Compilers and Platforms</link>
     <link linkend="boost_contract.getting_started.code_organization">Code Organization</link>
+    <link linkend="boost_contract.getting_started.build">Build</link>
 <link linkend="boost_contract.contract_programming_overview">Contract Programming Overview</link>
     <link linkend="boost_contract.contract_programming_overview.assertions">Assertions</link>
     <link linkend="boost_contract.contract_programming_overview.benefits_and_costs">Benefits and Costs</link>
     <link linkend="boost_contract.advanced.function_overloads">Function Overloads</link>
     <link linkend="boost_contract.advanced.lambdas__loops__code_blocks__and__constexpr__">Lambdas, Loops, Code Blocks (and <computeroutput><phrase role="keyword">constexpr</phrase></computeroutput>)</link>
     <link linkend="boost_contract.advanced.implementation_checks">Implementation Checks</link>
-    <link linkend="boost_contract.advanced.old_value_copies_at_body">Old Value Copies at Body</link>
+    <link linkend="boost_contract.advanced.old_values_copied_at_body">Old Values Copied at Body</link>
     <link linkend="boost_contract.advanced.named_overrides">Named Overrides</link>
     <link linkend="boost_contract.advanced.access_specifiers">Access Specifiers</link>
     <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__">Throw on Failures (and <computeroutput><phrase role="keyword">noexcept</phrase></computeroutput>)</link>
   <section id="boost_contract.getting_started">
     <title><link linkend="boost_contract.getting_started">Getting Started</link></title>
     <para>
-      This section presents preliminary information to start using this library.
+      This section shows how to setup and start using this library.
     </para>
     <section id="boost_contract.getting_started.this_documentation">
       <title><link linkend="boost_contract.getting_started.this_documentation">This
           builds and runs with the latest implementation of the library.
         </para>
         </footnote> It should be noted that the purpose of all examples of this documentation
-        is to illustrate how to use this library and not to represent real product
+        is to illustrate how to use this library and not to show real production
         code.
       </para>
       <para>
         of SFINAE and other template meta-programming techniques supported by the
         C++03 standard. It is possible to use this library without C++11 lambda functions
         but a large amount of boiler-plate code is required to manually program separate
-        functor to specify preconditions, postconditions, etc. (so using this library
+        functors to specify preconditions, postconditions, etc. (so using this library
         without C++11 lambda functions is possible but not recommended, see <link linkend="boost_contract.extras.no_lambda_functions__no_c__11_">No Lambda
         Functions</link>). It is also possible to use this library without variadic
         macros by manually programming a small amount of boiler-plate code (but most
         Some parts of this documentation use the syntax <literal moreinfo="none"><emphasis>type-of</emphasis>(...)</literal>
         to indicate an operator logically equivalent to C++11 <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">decltype</phrase><phrase role="special">(...)</phrase></computeroutput>. However, this library implementation
         does not actually use type deduction in these cases (because the library
-        already knows the types in question) so support for C++11 <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">decltype</phrase></computeroutput>
-        and other type-of implementations are not actually required by this library
-        (that is why <literal moreinfo="none"><emphasis>type-of</emphasis></literal> and not the
-        real <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">decltype</phrase></computeroutput> operator is used
-        in this documentation).
+        internally already knows the types in question) so support for C++11 <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">decltype</phrase></computeroutput> and other type-of implementations
+        are not actually required (that is why <literal moreinfo="none"><emphasis>type-of</emphasis></literal>
+        and not the real <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">decltype</phrase></computeroutput> operator
+        is used in this documentation).
       </para>
       <para>
         This library has been developed and tested using:
       </itemizedlist>
       <para>
         For information on other compilers and platforms see the library <ulink url="http://www.boost.org/development/tests/master/developer/contract.html">regression
-        tests</ulink>.
+        tests</ulink>. The development and maintenance of this library is hosted
+        on <ulink url="https://github.com/boostorg/contract">GitHub</ulink>.
       </para>
-      <warning>
-        <para>
-          It is strongly recommended to compile and use this library as a shared
-          library (a.k.a., Dynamically Linked Library or DLL) by defining the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_ALL_DYN_LINK</phrase></computeroutput> macro (or at least
-          <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_DYN_LINK">BOOST_CONTRACT_DYN_LINK</link></computeroutput>)
-          when building Boost.
-        </para>
-        <para>
-          It is possible to compile and use this library as a static library (by
-          defining the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_STATIC_LINK">BOOST_CONTRACT_STATIC_LINK</link></computeroutput>
-          macro) or as a header-only library (by leaving both <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_DYN_LINK">BOOST_CONTRACT_DYN_LINK</link></computeroutput>
-          and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_STATIC_LINK">BOOST_CONTRACT_STATIC_LINK</link></computeroutput>
-          undefined, as by default). However, this library is not guaranteed to always
-          work correctly in these cases. Specifically, this library might not correctly
-          disable contracts while checking other contracts and call the correct user-defined
-          contract failure handlers unless it is compiled as a shared library when
-          it is used across different program units (different programs, different
-          shared libraries in the same program, etc.).
-        </para>
-      </warning>
     </section>
     <section id="boost_contract.getting_started.code_organization">
       <title><link linkend="boost_contract.getting_started.code_organization">Code
       Organization</link></title>
       <para>
+        Let <literal moreinfo="none"><emphasis>boost-root</emphasis></literal> be the directory where
+        Boost source files were installed. This library flies are organized as follows:
+      </para>
+<programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><emphasis>boost-root</emphasis>/libs/contract        # Directory where this library files are.
+    build/                      # Build files (using BJam).
+    doc/                        # Documentation (using Boost.QuickBook).
+    example/                    # Examples (also those listed in this documentation).
+    include/                    # DO NOT USE: Use copies of these files from
+        boost/                  # <emphasis>boost-root</emphasis>/boost/ instead:
+            contract.hpp        #   - Include all headers at once.
+            contract_macro.hpp  #   - Include library macro interface.
+            contract/           #   - Header files that can be included one-by-one.
+                core/           #   - Fundamental headers (usually indirectly included by other headers).
+                detail/         #   - Implementation code (should never be included or used directly).
+    src/                        # Library source code to be compiled.
+    test/                       # Tests.
+</programlisting>
+      <para>
         All headers required by this library can be included at once by:
       </para>
 <programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="preprocessor">#include</phrase> <phrase role="special">&lt;</phrase><phrase role="identifier">boost</phrase><phrase role="special">/</phrase><phrase role="identifier">contract</phrase><phrase role="special">.</phrase><phrase role="identifier">hpp</phrase><phrase role="special">&gt;</phrase>
         Alternatively, all <literal moreinfo="none">boost/contract/*.hpp</literal> headers are independent
         from one another and they can be selectively included one-by-one based on
         the specific functionality of this library being used (but this was measured
-        to not make an appreciable difference in compile-time so <literal moreinfo="none">boost/contract.hp</literal>
+        to not make an appreciable difference in compile-time so <literal moreinfo="none">boost/contract.hpp</literal>
         can be included directly in most cases). The <literal moreinfo="none">boost/contract/core/*.hpp</literal>
         headers are not independent from other headers and they do not need to be
         directly included in user code when <literal moreinfo="none">boost/contract.hpp</literal>
         help troubleshooting).
       </para>
     </section>
+    <section id="boost_contract.getting_started.build">
+      <title><link linkend="boost_contract.getting_started.build">Build</link></title>
+      <para>
+        Let <literal moreinfo="none"><emphasis>boost-root</emphasis></literal> be the directory where
+        Boost source files were installed. This library is installed and compiled
+        as part of Boost using BJam.
+      </para>
+      <warning>
+        <para>
+          It is strongly recommended to compile and use this library as a shared
+          library (a.k.a., Dynamically Linked Library or DLL) by defining the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_ALL_DYN_LINK</phrase></computeroutput> macro (or at least
+          <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_DYN_LINK">BOOST_CONTRACT_DYN_LINK</link></computeroutput>)
+          when building Boost. When using BJam to build Boost, this can be achieved
+          by the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">link</phrase><phrase role="special">=</phrase><phrase role="identifier">shared</phrase></computeroutput> parameter (which is already the
+          default so no extra parameter is actually needed for <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">bjam</phrase></computeroutput>).
+        </para>
+        <para>
+          It is also possible to compile and use this library as a static library
+          (by defining the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_STATIC_LINK">BOOST_CONTRACT_STATIC_LINK</link></computeroutput>
+          macro) or as a header-only library (by leaving both <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_DYN_LINK">BOOST_CONTRACT_DYN_LINK</link></computeroutput>
+          and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_STATIC_LINK">BOOST_CONTRACT_STATIC_LINK</link></computeroutput>
+          undefined). However, this library is not guaranteed to always work correctly
+          in these cases. Specifically, this library might not correctly disable
+          contracts while checking other contracts and call the correct user-defined
+          contract failure handlers unless it is compiled as a shared library when
+          it is used across different program units (different programs, different
+          shared libraries in the same program, etc.).
+        </para>
+      </warning>
+      <bridgehead renderas="sect4" id="boost_contract.getting_started.build.h0">
+        <phrase id="boost_contract.getting_started.build.linux_based_systems"/><link linkend="boost_contract.getting_started.build.linux_based_systems">Linux-Based
+        Systems</link>
+      </bridgehead>
+      <para>
+        For example, to build all Boost libraries including this one (as shared libraries,
+        see also <ulink url="https://www.boost.org/doc/libs/1_70_0/more/getting_started">Boost
+        documentation</ulink>):
+      </para>
+<programlisting xmlns:xi="http://www.w3.org/2001/XInclude">$ cd <emphasis>boost-root</emphasis>
+$ ./bootstrap.sh
+$ ./bjam
+</programlisting>
+      <para>
+        To compile and run the <ulink url="../../example/features/introduction.cpp"><literal moreinfo="none"><emphasis>boost-root</emphasis>/libs/contract/example/features/introduction.cpp</literal></ulink>
+        example:
+      </para>
+<programlisting xmlns:xi="http://www.w3.org/2001/XInclude">$ cd <emphasis>boost-root</emphasis>/libs/contract/example
+$ ../../../bjam features-introduction
+</programlisting>
+      <para>
+        To compile and run all this library's tests (this might take while):
+      </para>
+<programlisting xmlns:xi="http://www.w3.org/2001/XInclude">$ cd <emphasis>boost-root</emphasis>/libs/contract/test
+$ ../../../bjam
+</programlisting>
+      <para>
+        To compile and run code that uses this library but without BJam (similarly
+        for Clang):
+      </para>
+<programlisting xmlns:xi="http://www.w3.org/2001/XInclude">$ cd /tmp
+$ g++ -std=c++11 -D BOOST_CONTRACT_DYN_LINK -I <emphasis>boost-root</emphasis> <emphasis>boost-root</emphasis>/stage/lib/<emphasis>system-prefix</emphasis>boost_contract.dll <emphasis>boost-root</emphasis>/libs/contract/example/features/introduction.cpp -o introduction
+$ export PATH=$PATH:<emphasis>boost-root</emphasis>/stage/lib
+$ ./introduction
+</programlisting>
+      <bridgehead renderas="sect4" id="boost_contract.getting_started.build.h1">
+        <phrase id="boost_contract.getting_started.build.windows_based_systems"/><link linkend="boost_contract.getting_started.build.windows_based_systems">Windows-Based
+        Systems</link>
+      </bridgehead>
+      <para>
+        For example, to build all Boost libraries including this one (as DLLs, see
+        also <ulink url="https://www.boost.org/doc/libs/1_70_0/more/getting_started">Boost
+        documentation</ulink>):
+      </para>
+<programlisting xmlns:xi="http://www.w3.org/2001/XInclude">&gt;cd <emphasis>boost-root</emphasis>
+&gt;bootstrap.bat
+&gt;bjam
+</programlisting>
+      <para>
+        To compile and run the <ulink url="../../example/features/introduction.cpp"><literal moreinfo="none"><emphasis>boost-root</emphasis>/libs/contract/example/features/introduction.cpp</literal></ulink>
+        example:
+      </para>
+<programlisting xmlns:xi="http://www.w3.org/2001/XInclude">&gt;cd <emphasis>boost-root</emphasis>\libs\contract\example
+&gt;..\..\..\bjam features-introduction
+</programlisting>
+      <para>
+        To compile and run all this library's tests (this might take while):
+      </para>
+<programlisting xmlns:xi="http://www.w3.org/2001/XInclude">&gt;cd <emphasis>boost-root</emphasis>\libs\contract\test
+&gt;..\..\..\bjam
+</programlisting>
+      <para>
+        To compile and run code that uses this library but without BJam:
+      </para>
+<programlisting xmlns:xi="http://www.w3.org/2001/XInclude">&gt;cd C:\Temp
+&gt;cl /MDd /EHs /std:c++11 /D BOOST_CONTRACT_DYN_LINK /I <emphasis>boost-root</emphasis> /link /DLL /LIBPATH:<emphasis>boost-root</emphasis>\stage\lib <emphasis>boost-root</emphasis>\libs\contract\example\features\introduction.cpp /out:introduction
+&gt;set PATH=%PATH%;<emphasis>boost-root</emphasis>/stage/lib
+&gt;introduction
+</programlisting>
+    </section>
   </section>
   <section id="boost_contract.contract_programming_overview">
     <title><link linkend="boost_contract.contract_programming_overview">Contract
     <para>
       This section gives an overview of contract programming (see <link linkend="Meyer97_anchor">[Meyer97]</link>,
       <link linkend="Mitchell02_anchor">[Mitchell02]</link>, and <link linkend="N1613_anchor">[N1613]</link>
-      for more detailed introductions to contract programming). Readers that already
+      for more extensive introductions to contract programming). Readers that already
       have a basic understanding of contract programming can skip this section and
       maybe come back to it after reading the <link linkend="boost_contract.tutorial">Tutorial</link>.
     </para>
         programming. It is assumed that programmes understand the benefits and trade-offs
         associated with contract programming and they have already decided to use
         this methodology in their code. Then, this library aims to be the best and
-        more complete contract programming library for C++ (without using preprocessors
-        and other tools external to the C++ preprocessor and language itself).
+        more complete contract programming library for C++ (without using programs
+        and tools external to the C++ language and its preprocessor).
       </para>
     </note>
     <section id="boost_contract.contract_programming_overview.assertions">
             programmers expect to be true when a function is called (e.g., to check
             constraints on function arguments). Operations that logically have no
             preconditions (i.e., that are always well-defined for the entire domain
-            of their inputs) are often referred to as having a <emphasis>wide contract</emphasis>.
-            This is in contrast to operations that have preconditions which are often
+            of their inputs) are also referred to as having a <emphasis>wide contract</emphasis>.
+            This is in contrast to operations that have preconditions which are also
             referred to as having a <emphasis>narrow contract</emphasis> (note that
-            operations with truly narrow contracts are expected to also never throw
-            exceptions). <footnote id="boost_contract.contract_programming_overview.assertions.f0">
+            operations with truly narrow contracts are also expected to never throw
+            exceptions because the implementation body of these operations is always
+            expected to succeed after its preconditions are checked to be true).
+            <footnote id="boost_contract.contract_programming_overview.assertions.f0">
             <para>
               The nomenclature of wide and narrow contracts has gained some popularity
               in recent years in the C++ community (appearing in a number of more
               recent proposals to add contract programming to the C++ standard, see
               <link linkend="boost_contract.bibliography">Bibliography</link>). This
               nomenclature is perfectly reasonable but it is not often used in this
-              document just because the authors generally prefer to explicitly mention
+              document just because the authors usually prefer to explicitly say
               "this operation has no preconditions..." or "this operation
-              has preconditions...".
+              has preconditions..." (this is just a matter of taste).
             </para>
             </footnote>
           </simpara>
             an exception (e.g., to check the result and any side effect that a function
             might have). Postconditions can access the function return value (for
             non-void functions) and also <emphasis>old values</emphasis> (which are
-            the values that expressions had before the function body was executed).
+            the values that expressions had before the function implementation was
+            executed).
           </simpara>
         </listitem>
         <listitem>
             return value). <footnote id="boost_contract.contract_programming_overview.assertions.f1">
             <para>
               <emphasis role="bold">Rationale:</emphasis> Contract assertions for
-              exception guarantees were first introduced by this library (even if
-              exception safety guarantees have long been part of C++ STL documentation).
-              Contract assertions for exception safety guarantees are not part of
-              <link linkend="N1962_anchor">[N1962]</link> or other references listed
-              in the <link linkend="boost_contract.bibliography">Bibliography</link>.
+              exception guarantees were first introduced by this library, they are
+              not part of <link linkend="N1962_anchor">[N1962]</link> or other references
+              listed in the <link linkend="boost_contract.bibliography">Bibliography</link>
+              (even if exception safety guarantees have long been part of C++ STL
+              documentation).
             </para>
             </footnote>
           </simpara>
             (and also after the destructor is executed but only when the destructor
             throws an exception). Class invariants define valid states for all objects
             of a given class. It is possible to specify a different set of class
-            invariants for volatile public functions, namely volatile class invariants.
-            It is also possible to specify <emphasis>static class invariants</emphasis>
-            which are excepted to be true before and after the execution of any constructor,
-            destructor (even if it does not throw an exception), and public function
-            (even if static). <footnote id="boost_contract.contract_programming_overview.assertions.f2">
+            invariants for volatile public functions, namely <emphasis>volatile class
+            invariants</emphasis>. It is also possible to specify <emphasis>static
+            class invariants</emphasis> which are excepted to be true before and
+            after the execution of any constructor, destructor (even if it does not
+            throw an exception), and public function (even if static). <footnote id="boost_contract.contract_programming_overview.assertions.f2">
             <para>
               <emphasis role="bold">Rationale:</emphasis> Static and volatile class
-              invariants were first introduced by this library to reflect the fact
-              that C++ supports both static and volatile public functions. Static
-              and volatile class invariants are not part of <link linkend="N1962_anchor">[N1962]</link>
-              or other references listed in the <link linkend="boost_contract.bibliography">Bibliography</link>.
+              invariants were first introduced by this library (simply to reflect
+              the fact that C++ supports also static and volatile public functions),
+              they are not part of <link linkend="N1962_anchor">[N1962]</link> or
+              other references listed in the <link linkend="boost_contract.bibliography">Bibliography</link>.
             </para>
             </footnote>
           </simpara>
         </listitem>
       </itemizedlist>
       <para>
+        The actual function implementation code, that remains outside of these contract
+        assertions, is often referred to as the <emphasis>function body</emphasis>
+        in contract programming.
+      </para>
+      <para>
         Class invariants can also be used to specify <emphasis>basic</emphasis> exception
         safety guarantees for an object (because they are checked at exit of public
-        functions even when those throw exceptions), while contract assertions for
-        exception guarantees can be used to specify <emphasis>strong</emphasis> exception
-        safety guarantees for given operations on the same object.
+        functions even when those throw exceptions). Contract assertions for exception
+        guarantees can be used to specify <emphasis>strong</emphasis> exception safety
+        guarantees for a given operation on the same object.
       </para>
       <para>
         It is also a common requirement for contract programming to automatically
           variable needs to be used by this library implementation. This library
           will automatically protect such a global variable from race conditions
           in multi-threated programs, but this will effectively introduce a global
-          lock in the program (the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870598624">BOOST_CONTRACT_DISABLE_THREADS</link></computeroutput>
+          lock in the program (the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999743888">BOOST_CONTRACT_DISABLE_THREADS</link></computeroutput>
           macro can be defined to disable this global lock but at the risk of incurring
           in race conditions). <footnote id="boost_contract.contract_programming_overview.assertions.f3">
           <para>
-            <emphasis role="bold">Rationale:</emphasis> <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870598624">BOOST_CONTRACT_DISABLE_THREADS</link></computeroutput>
+            <emphasis role="bold">Rationale:</emphasis> <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999743888">BOOST_CONTRACT_DISABLE_THREADS</link></computeroutput>
             is named after <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_DISABLE_THREADS</phrase></computeroutput>.
           </para>
           </footnote>
         Assertions</link>
       </bridgehead>
       <para>
-        A limited form of contract programming is the use of the C-style <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">assert</phrase></computeroutput> macro. Using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">assert</phrase></computeroutput>
+        A limited form of contract programming (typically some form of precondition
+        and basic postcondition checking) can be achieved using the C-style <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">assert</phrase></computeroutput> macro. Using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">assert</phrase></computeroutput>
         is common practice for many programmers but it suffers of the following limitations:
       </para>
       <itemizedlist>
             postconditions can usually be disabled trusting the correctness of the
             implementation while preconditions might still need to remain enabled
             because of possible changes in the calling code (e.g., postconditions
-            of a given library could be disabled after testing while its preconditions
-            can be kept enabled given the library cannot predict changes in the user
-            code that will be calling the library). Using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">assert</phrase></computeroutput>
+            of a given library could be disabled after testing while keeping the
+            library preconditions enabled given that future changes in the user code
+            that calls the library cannot be anticipated). Using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">assert</phrase></computeroutput>
             it is not possible to selectively disable only postconditions and all
             assertions must be disabled at once.
           </simpara>
         <listitem>
           <simpara>
             <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">assert</phrase></computeroutput> requires to manually
+            program extra code to correctly check postconditions (specifically to
+            handle functions with multiple return statements, to not check postconditions
+            when functions throw exceptions, and to implement old values).
+          </simpara>
+        </listitem>
+        <listitem>
+          <simpara>
+            <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">assert</phrase></computeroutput> requires to manually
             program extra code to check class invariants (extra member functions,
             try blocks, etc.).
           </simpara>
         </listitem>
       </itemizedlist>
       <para>
-        Contract programming does not suffers of these limitations.
+        Contract programming does not suffer of these limitations.
       </para>
     </section>
     <section id="boost_contract.contract_programming_overview.benefits_and_costs">
         can be used as the basic tool to write <quote>correct</quote> software.
         <link linkend="Stroustrup94_anchor">[Stroustrup94]</link> discusses the key
         importance of class invariants plus advantages and disadvantages of preconditions
-        and postconditions. The following is a short summary of benefits associated
-        with contract programming inspired mainly by <link linkend="N1613_anchor">[N1613]</link>:
+        and postconditions.
+      </para>
+      <para>
+        The following is a short summary of benefits associated with contract programming
+        inspired mainly by <link linkend="N1613_anchor">[N1613]</link>:
       </para>
       <itemizedlist>
         <listitem>
         <listitem>
           <simpara>
             Easier debugging: Contract programming can provide a powerful debugging
-            facility because, if contracts are well written, bugs will cause contract
+            facility because, if contracts are well-written, bugs will cause contract
             assertions to fail exactly where the problem first occurs instead than
             at some later stage of the program execution in an apparently unrelated
             (and often hard to debug) manner. Note that a precondition failure points
             naturally specifies what a test should check. For example, preconditions
             of a function state which inputs cause the function to fail and postconditions
             state which outputs are produced by the function on successful exit (contract
-            programming should be seen as a tool to complement, but obviously not
-            to replace, testing).
+            programming should be seen as a tool to complement and guide, but obviously
+            not to replace, testing).
           </simpara>
         </listitem>
         <listitem>
           <simpara>
             Formal design: Contract programming can serve to reduce the gap between
             designers and programmers by providing a precise and unambiguous specification
-            language in terms of the contract assertions. Moreover, contracts can
-            make code reviews easier by clarifying some of the semantics and usage
-            of the code.
+            language in terms of contract assertions. Moreover, contracts can make
+            code reviews easier by clarifying some of the semantics and usage of
+            the code.
           </simpara>
         </listitem>
         <listitem>
           <simpara>
-            Formalized inheritance: Contract programming formalizes the virtual function
+            Formalize inheritance: Contract programming formalizes the virtual function
             overriding mechanism using subcontracting as justified by the <ulink url="http://en.wikipedia.org/wiki/Liskov_substitution_principle">substitution
             principle</ulink>. This keeps the base class programmers in control as
             overriding functions always have to fully satisfy the contracts of their
       <para>
         Of course, not all formal contract specifications can be asserted in C++.
         For example, in C++ is it not possible to assert the validity of an iterator
-        range in the general case because the only way to check if two iterators
-        form a valid range is to keep incrementing the first iterator until we reach
-        the second iterator. However, in case the iterator range is invalid, such
-        a code would render undefined behaviour or run forever instead of failing
-        an assertion. Nevertheless, a large amount of contract assertions can be
-        successfully programmed in C++ as illustrated by the numerous examples in
-        this documentation and from the literature (for example see how much of STL
-        <link linkend="N1962_vector_anchor"><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">vector</phrase></computeroutput></link>
-        contract assertions can actually be programmed in C++ using this library).
+        range in the general case (because the only way to check if two iterators
+        form a valid range is to keep incrementing the first iterator until it reaches
+        the second iterator, but if the iterator range is invalid then such a code
+        would render undefined behaviour or run forever instead of failing an assertion).
+        Nevertheless, a large amount of contract assertions can be successfully programmed
+        in C++ as illustrated by the numerous examples in this documentation and
+        from the literature (for example see how much of STL <link linkend="N1962_vector_anchor"><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">vector</phrase></computeroutput></link> contract assertions can actually
+        be programmed in C++ using this library).
       </para>
       <bridgehead renderas="sect4" id="boost_contract.contract_programming_overview.benefits_and_costs.h1">
         <phrase id="boost_contract.contract_programming_overview.benefits_and_costs.costs"/><link linkend="boost_contract.contract_programming_overview.benefits_and_costs.costs">Costs</link>
         <listitem>
           <simpara>
             Call additional functors that check preconditions, postconditions, exception
-            guarantees, class invariants, etc. (especially for subcontracting).
+            guarantees, class invariants, etc. (these can add up to many extra calls
+            especially when using subcontracting).
           </simpara>
         </listitem>
       </itemizedlist>
         To mitigate the run-time performance impact, programmers can selectively
         disable run-time checking of some of the contract assertions. Programmers
         will have to decide based on the performance trade-offs required by their
-        applications, but a reasonable approach often is to (see <link linkend="boost_contract.extras.disable_contract_checking">Disable
+        specific applications, but a reasonable approach often is to (see <link linkend="boost_contract.extras.disable_contract_checking">Disable
         Contract Checking</link>):
       </para>
       <itemizedlist>
         Therefore, calls to private and protected functions with contracts execute
         the same steps as the ones indicated above for non-member functions (checking
         only preconditions and postconditions, without checking class invariants
-        and subcontracting).
+        and without subcontracting).
       </para>
     </section>
     <section id="boost_contract.contract_programming_overview.public_function_calls">
       </bridgehead>
       <para>
         Let's consider a public function in a derived class that overrides public
-        virtual functions declared its public base classes (because of C++ multiple
+        virtual functions declared by its public base classes (because of C++ multiple
         inheritance, the function could override from more than one of its base classes).
         We refer to the function in the derived class as the <emphasis>overriding
         function</emphasis>, and to the set of base classes containing all the <emphasis>overridden
       </para>
       <para>
         When subcontracting, overridden functions are searched (at compile-time)
-        deeply in the public branches of the inheritance tree (i.e., not just the
-        derived class's direct public parents are inspected, but also all its public
-        grandparents, etc.). In case of multiple inheritance this search also extends
-        widely to all multiple public base classes following their order of declaration
-        in the derived class inheritance list (as usual in C++, this search could
-        result in multiple overridden functions and therefore in subcontracting from
-        multiple public base classes). Note that only public base classes are considered
-        for subcontracting because private and protected base classes are not accessible
-        to the user at the calling site where the <ulink url="http://en.wikipedia.org/wiki/Liskov_substitution_principle">substitution
+        deeply in all public branches of the inheritance tree (i.e., not just the
+        derived class' direct public parents are inspected, but also all its public
+        grandparents, etc.). In case of multiple inheritance, this search also extends
+        (at compile-time) widely to all public trees of the multiple inheritance
+        forest (multiple public base classes are searched following their order of
+        declaration in the derived class' inheritance list). As usual with C++ multiple
+        inheritance, this search could result in multiple overridden functions and
+        therefore in subcontracting from multiple public base classes. Note that
+        only public base classes are considered for subcontracting because private
+        and protected base classes are not accessible to the user at the calling
+        site where the <ulink url="http://en.wikipedia.org/wiki/Liskov_substitution_principle">substitution
         principle</ulink> applies.
       </para>
       <para>
         A call to the overriding public function with a contract executes the following
-        steps (see <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>):
+        steps (see <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>):
       </para>
       <orderedlist inheritnum="ignore" continuation="restarts">
         <listitem>
         <para>
           As indicated by the steps above and in accordance with the <ulink url="http://en.wikipedia.org/wiki/Liskov_substitution_principle">substitution
           principle</ulink>, subcontracting checks preconditions in <link linkend="or_anchor"><literal moreinfo="none"><emphasis>OR</emphasis></literal></link>
-          while class invariants, postconditions, and exceptions guarantees in <link linkend="and_anchor"><literal moreinfo="none"><emphasis>AND</emphasis></literal></link>
+          while class invariants, postconditions, and exceptions guarantees are checked
+          in <link linkend="and_anchor"><literal moreinfo="none"><emphasis>AND</emphasis></literal></link>
           with preconditions, class invariants, postconditions, and exceptions guarantees
-          of base classes.
+          of base classes respectively.
         </para>
       </note>
       <bridgehead renderas="sect4" id="boost_contract.contract_programming_overview.public_function_calls.h1">
       </bridgehead>
       <para>
         A call to a non-static public function with a contract (that does not override
-        functions from any of the public base classes) executes the following steps
-        (see <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>):
+        functions from any of its public base classes) executes the following steps
+        (see <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>):
       </para>
       <orderedlist inheritnum="ignore" continuation="restarts">
         <listitem>
       </bridgehead>
       <para>
         A call to a static public function with a contract executes the following
-        steps (see <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>):
+        steps (see <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>):
       </para>
       <orderedlist inheritnum="ignore" continuation="restarts">
         <listitem>
         </listitem>
         <listitem>
           <simpara>
-            Check function preconditions (but none of the preconditions from function
+            Check function preconditions (but none of the preconditions from functions
             in base classes).
           </simpara>
         </listitem>
               <listitem>
                 <simpara>
                   Check constructor postconditions (but these cannot access the object
-                  old value <literal moreinfo="none"><emphasis>oldof</emphasis></literal><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">(*</phrase><phrase role="keyword">this</phrase><phrase role="special">)</phrase></computeroutput> because there was no object before
-                  the execution of the constructor body).
+                  old value <literal moreinfo="none"><emphasis>oldof</emphasis></literal><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">(*</phrase><phrase role="keyword">this</phrase><phrase role="special">)</phrase></computeroutput> because the object was not constructed
+                  before the execution of the constructor body).
                 </simpara>
               </listitem>
             </orderedlist>
         <listitem>
           <simpara>
             Else, check constructor exception guarantees (but these cannot access
-            the object old value <literal moreinfo="none"><emphasis>oldof</emphasis></literal><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">(*</phrase><phrase role="keyword">this</phrase><phrase role="special">)</phrase></computeroutput> because there was no object before the
-            execution of the constructor body, plus they can only access class static
-            members because the object was not successfully constructed upon the
-            constructor body throwing an exception).
+            the object old value <literal moreinfo="none"><emphasis>oldof</emphasis></literal><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">(*</phrase><phrase role="keyword">this</phrase><phrase role="special">)</phrase></computeroutput> because the object was not constructed
+            before the execution of the constructor body, plus they can only access
+            class' static members because the object has not been successfully constructed
+            given the constructor body threw an exception in this case).
           </simpara>
         </listitem>
       </orderedlist>
             <orderedlist inheritnum="ignore" continuation="restarts">
               <listitem>
                 <simpara>
-                  Check destructor postconditions (but these can only access class
-                  static members and the object old value <literal moreinfo="none"><emphasis>oldof</emphasis></literal><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">(*</phrase><phrase role="keyword">this</phrase><phrase role="special">)</phrase></computeroutput> because there is no object after
-                  successful execution of the destructor body). <footnote id="boost_contract.contract_programming_overview.destructor_calls.f0">
+                  Check destructor postconditions (but these can only access class'
+                  static members and the object old value <literal moreinfo="none"><emphasis>oldof</emphasis></literal><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">(*</phrase><phrase role="keyword">this</phrase><phrase role="special">)</phrase></computeroutput> because the object has been destroyed
+                  after successful execution of the destructor body). <footnote id="boost_contract.contract_programming_overview.destructor_calls.f0">
                   <para>
                     <emphasis role="bold">Rationale:</emphasis> Postconditions for
                     destructors are not part of <link linkend="N1962_anchor">[N1962]</link>
             <orderedlist inheritnum="ignore" continuation="restarts">
               <listitem>
                 <simpara>
-                  Check non-static class invariants (because the object was not successfully
+                  Check non-static <link linkend="and_anchor"><literal moreinfo="none"><emphasis>AND</emphasis></literal></link>
+                  volatile class invariants (because the object was not successfully
                   destructed so it still exists and should satisfy its invariants).
                 </simpara>
               </listitem>
       </para>
       <para>
         Whenever possible (e.g., class invariants and postcondition old values),
-        this library automatically enforces this constant-correctness constraint
+        this library automatically enforces this <emphasis>constant-correctness constraint</emphasis>
         at compile-time using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">const</phrase></computeroutput>.
         However, this library cannot automatically enforce this constraint in all
         cases (for preconditions and postconditions of mutable member functions,
         for global variables, etc.). See <link linkend="boost_contract.extras.no_lambda_functions__no_c__11_">No
-        Lambda Functions</link> for ways of using this library that enforces the
-        constant-correctness constraint at compile-time (but at the cost of significant
-        boiler-plate code to be programmed manually so not recommended in general).
+        Lambda Functions</link> for ways of using this library that enforce the constant-correctness
+        constraint at compile-time (but at the cost of significant boiler-plate code
+        to be programmed manually so not recommended in general).
       </para>
       <note>
         <para>
       <title><link linkend="boost_contract.contract_programming_overview.specifications_vs__implementation">Specifications
       vs. Implementation</link></title>
       <para>
-        Contracts are part of the program specifications and not of its implementation.
+        Contracts are part of the program specification and not of its implementation.
         Therefore, contracts should ideally be programmed within C++ declarations,
         and not within definitions.
       </para>
         be programmed at the very top of the function definition). See <link linkend="boost_contract.extras.separate_body_implementation">Separate
         Body Implementation</link> for ways of using this library to program contract
         specifications outside of the body implementation (but at the cost of writing
-        one extra function for any given function, for applications where this requirement
-        is truly important).
+        one extra function for any given function so not recommended in general).
       </para>
       <para>
         Furthermore, contracts are most useful when they assert conditions only using
         that the caller was made unable to fully check the preconditions in the first
         place). However, given that C++ provides programmers ways around access level
         restrictions (<computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">friend</phrase></computeroutput>, function
-        pointers, etc.), this library leaves it up to the programmers to make sure
-        that only public members are used in contract assertions (especially in preconditions).
+        pointers, etc.), this library leaves it up to programmers to make sure that
+        only public members are used in contract assertions (especially in preconditions).
         (<link linkend="N1962_anchor">[N1962]</link> follows the same approach not
         restricting contracts to only use public members, Eiffel instead generates
         a compile-time error if preconditions are asserted using non-public members.)
         <footnote id="boost_contract.contract_programming_overview.specifications_vs__implementation.f0">
         <para>
-          <emphasis role="bold">Rationale:</emphasis> If C++ <ulink url="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#45">defect
+          <emphasis role="bold">Rationale:</emphasis> Out of curiosity, if C++ <ulink url="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#45">defect
           45</ulink> had not been fixed, this library could have been implemented
           to generate a compile-time error when precondition assertions use non-public
-          members more similarly to Eiffel's implementation (but not necessary the
-          best approach for C++).
+          members more similarly to Eiffel's implementation (but still, not necessary
+          the best approach for C++).
         </para>
         </footnote>
       </para>
         If preconditions, postconditions, exception guarantees, or class invariants
         are either checked to be false or their evaluation throws an exception at
         run-time then this library will call specific <emphasis>failure handler functions</emphasis>.
+        <footnote id="boost_contract.contract_programming_overview.on_contract_failures.f0">
+        <para>
+          <emphasis role="bold">Rationale:</emphasis> If the evaluation of a contract
+          assertion throws an exception, the assertion cannot be checked to be true
+          so the only safe thing to assume is that the assertion failed (indeed the
+          contract assertion checking failed) and call the contract failure handler
+          in this case also.
+        </para>
+        </footnote>
       </para>
       <para>
         By default, these failure handler functions print a message to the standard
         etc. programmers can define their own failure handler functions that can
         take any user-specified action (throw an exception, exit the program with
         an error code, etc., see <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__">Throw
-        on Failures</link>). <footnote id="boost_contract.contract_programming_overview.on_contract_failures.f0">
+        on Failures</link>). <footnote id="boost_contract.contract_programming_overview.on_contract_failures.f1">
         <para>
           <emphasis role="bold">Rationale:</emphasis> This customizable failure handling
           mechanism is similar to the one used by C++ <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">terminate</phrase></computeroutput>
           but in general destructors should not throw in C++ (to comply with STL
           exception safety, C++11 implicit <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">noexcept</phrase></computeroutput>
           declarations for destructors, etc.). Furthermore, programming a failure
-          handler that throws for exception guarantees will throw an exception (the
-          one reporting the contract failure) while there is already an active exception
-          (the one that caused the exception guarantees to be checked in the first
-          place), and this will force C++ to terminate the program anyway.
+          handler that throws on exception guarantee failures results in throwing
+          an exception (the one reporting the contract failure) while there is already
+          an active exception (the one that caused the exception guarantees to be
+          checked in the first place), and this will force C++ to terminate the program
+          anyway.
         </para>
       </note>
       <para>
       <para>
         The contract programming features supported by this library are largely based
         on <link linkend="N1962_anchor">[N1962]</link> and on the Eiffel programming
-        language. The following table compares contract programming features among
-        this library, <link linkend="N1962_anchor">[N1962]</link> (unfortunately
-        the C++ standard committee rejected this proposal commenting on a lack of
-        interest in adding contract programming to C++ at that time, even if <link linkend="N1962_anchor">[N1962]</link> itself is sound), a more recent proposal
-        <link linkend="P0380_anchor">[P0380]</link> (which has gain some traction
-        within the C++ standard committee but unfortunately only supports preconditions
-        and postconditions, while does not support class invariants, old values,
-        and subcontracting), the Eiffel and D programming languages:
+        language.
+      </para>
+      <para>
+        The following table compares contract programming features among this library,
+        <link linkend="N1962_anchor">[N1962]</link> (unfortunately the C++ standard
+        committee rejected this proposal commenting on a lack of interest in adding
+        contract programming to C++ at that time, even if <link linkend="N1962_anchor">[N1962]</link>
+        itself is sound), a more recent proposal <link linkend="P0380_anchor">[P0380]</link>
+        (which was accepted in the C++20 standard but unfortunately only supports
+        preconditions and postconditions, while does not support class invariants,
+        old values, and subcontracting), the Eiffel and D programming languages.
+        Some of the items listed in this summary table will become clear in detail
+        after reading the remaining sections of this documentation.
       </para>
       <informaltable frame="all">
         <tgroup cols="6">
               </entry>
               <entry>
                 <para>
-                  <link linkend="P0380_anchor">[P0380]</link> Proposal (being considered
-                  for C++2x)
+                  C++20 (see <link linkend="P0380_anchor">[P0380]</link>)
                 </para>
               </entry>
               <entry>
                   <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">invariant</phrase></computeroutput>, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">static_invariant</phrase></computeroutput>, and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">base_types</phrase></computeroutput>. The last three specifiers
                   appear in user code so their names can be referred to or changed
                   using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_INVARIANT">BOOST_CONTRACT_INVARIANT</link></computeroutput>,
-                  <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123869498768">BOOST_CONTRACT_STATIC_INVARIANT</link></computeroutput>,
-                  and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870587168">BOOST_CONTRACT_BASES_TYPEDEF</link></computeroutput>
+                  <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394998621472">BOOST_CONTRACT_STATIC_INVARIANT</link></computeroutput>,
+                  and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999732400">BOOST_CONTRACT_BASES_TYPEDEF</link></computeroutput>
                   macros respectively to avoid name clashes.
                 </para>
               </entry>
                   Yes, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OLDOF">BOOST_CONTRACT_OLDOF</link></computeroutput>
                   macro and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.old_ptr">boost::contract::old_ptr</link></computeroutput>
                   (but copied before preconditions unless <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">.</phrase><phrase role="identifier">old</phrase><phrase role="special">(...)</phrase></computeroutput>
-                  is used as shown in <link linkend="boost_contract.advanced.old_value_copies_at_body">Old
-                  Value Copies at Body</link>). For templates, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.old_ptr_if_copyable">boost::contract::old_ptr_if_copyable</link></computeroutput>
+                  is used as shown in <link linkend="boost_contract.advanced.old_values_copied_at_body">Old
+                  Values Copied at Body</link>). For templates, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.old_ptr_if_copyable">boost::contract::old_ptr_if_copyable</link></computeroutput>
                   skips old value copies for non-copyable types and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.condition_if">boost::contract::condition_if</link></computeroutput>
                   skips old value copies selectively based on old expression type
-                  requirements.
+                  requirements (on compilers that do not support <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase>
+                  <phrase role="keyword">constexpr</phrase></computeroutput>).
                 </para>
               </entry>
               <entry>
                   Yes, also supports subcontracting for multiple inheritance (<computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_BASE_TYPES">BOOST_CONTRACT_BASE_TYPES</link></computeroutput>,
                   <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OVERRIDE">BOOST_CONTRACT_OVERRIDE</link></computeroutput>,
                   and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.virtual_">boost::contract::virtual_</link></computeroutput>
-                  are used for declaring base classes, overrides and virtual public
+                  are used to declare base classes, overrides and virtual public
                   functions respectively).
                 </para>
               </entry>
                     two base class functions in <link linkend="or_anchor"><literal moreinfo="none"><emphasis>OR</emphasis></literal></link>
                     (so even in <link linkend="N1962_anchor">[N1962]</link> preconditions
                     can indirectly subcontract when multiple inheritance is used).
-                    The authors of this library found that confusing about <link linkend="N1962_anchor">[N1962]</link>. Furthermore, subcontracting
-                    preconditions is soundly defined by the <ulink url="http://en.wikipedia.org/wiki/Liskov_substitution_principle">substitution
+                    Furthermore, subcontracting preconditions is soundly defined
+                    by the <ulink url="http://en.wikipedia.org/wiki/Liskov_substitution_principle">substitution
                     principle</ulink> so this library allows to subcontract preconditions
                     as Eiffel does (users can always avoid using this feature if
                     they have no need for it). (This is essentially the only feature
-                    on which this library deliberately differ from <link linkend="N1962_anchor">[N1962]</link>.)
+                    on which this library deliberately differs from <link linkend="N1962_anchor">[N1962]</link>.)
                   </para>
                   </footnote>
                 </para>
               </entry>
               <entry>
                 <para>
-                  No, assertions only (in addition only public members can be used
-                  in preconditions).
+                  No, assertions only (in addition contracts of public, protected,
+                  and private members can only use other public, public/protected,
+                  and public/protected/private members respectively).
                 </para>
               </entry>
               <entry>
               </entry>
               <entry>
                 <para>
-                  Yes.
+                  Yes (side effects in contracts lead to undefined behaviour).
                 </para>
               </entry>
               <entry>
               </entry>
               <entry>
                 <para>
-                  Yes, but use <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870540560">BOOST_CONTRACT_PRECONDITIONS_DISABLE_NO_ASSERTION</link></computeroutput>
-                  to disable no assertion while checking preconditions (see <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870534752">BOOST_CONTRACT_ALL_DISABLE_NO_ASSERTION</link></computeroutput>).
+                  Yes, but use <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999685184">BOOST_CONTRACT_PRECONDITIONS_DISABLE_NO_ASSERTION</link></computeroutput>
+                  to disable no assertion while checking preconditions (see also
+                  <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999679376">BOOST_CONTRACT_ALL_DISABLE_NO_ASSERTION</link></computeroutput>).
                   <footnote id="boost_contract.contract_programming_overview.feature_summary.f1">
                   <para>
-                    <emphasis role="bold">Rationale:</emphasis> Theoretically, it
-                    can be shown that an incorrect argument might be passed to the
-                    function body when assertion checking is disabled while checking
-                    preconditions (see <ulink url="http://lists.boost.org/Archives/boost/2010/04/164862.php">Re:
-                    [boost] [contract] diff n1962</ulink>). However, that possibility
-                    is limited to contract checking when an incorrect argument will
-                    simply fail the contract and call the related contract failure
-                    handler as expected anyway. In any case, because of that <link linkend="N1962_anchor">[N1962]</link> does not disable any assertion
-                    while checking preconditions. That makes it possible to have
-                    infinite recursion while checking preconditions so Eiffel disables
-                    assertion checking also while checking preconditions. Therefore,
-                    this library by default disables assertion checking also while
-                    checking preconditions, but it also provides the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870540560">BOOST_CONTRACT_PRECONDITIONS_DISABLE_NO_ASSERTION</link></computeroutput>
+                    <emphasis role="bold">Rationale:</emphasis> Technically, it can
+                    be shown that an invalid argument can reach the function body
+                    when assertion checking is disabled while checking preconditions
+                    (that is why <link linkend="N1962_anchor">[N1962]</link> does
+                    not disable any assertion while checking preconditions, see
+                    <ulink url="http://lists.boost.org/Archives/boost/2010/04/164862.php">Re:
+                    [boost] [contract] diff n1962</ulink>). However, this can only
+                    happen while checking contracts when an invalid argument passed
+                    to the body, which should results in the body either throwing
+                    an exception or returning an incorrect result, will in turn fail
+                    the contract assertion being checked by the caller of the body
+                    and invoke the related contract failure handler as desired in
+                    the first place. Furthermore, not disabling assertions while
+                    checking preconditions (like <link linkend="N1962_anchor">[N1962]</link>
+                    does) makes it possible to have infinite recursion while checking
+                    preconditions. Therefore, this library by default disables assertion
+                    checking also while checking preconditions (like Eiffel does),
+                    but it also provides the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999685184">BOOST_CONTRACT_PRECONDITIONS_DISABLE_NO_ASSERTION</link></computeroutput>
                     configuration macro so users can change this behaviour to match
                     <link linkend="N1962_anchor">[N1962]</link> if needed.
                   </para>
                   </footnote> (In multi-threaded programs this introduces a global
-                  lock, see <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870598624">BOOST_CONTRACT_DISABLE_THREADS</link></computeroutput>.)
+                  lock, see <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999743888">BOOST_CONTRACT_DISABLE_THREADS</link></computeroutput>.)
                 </para>
               </entry>
               <entry>
                     automatically used to disable checking of class invariants within
                     nested member function calls (similarly to Eiffel). This feature
                     was required by older revisions of <link linkend="N1962_anchor">[N1962]</link>
-                    but it is no longer required in <link linkend="N1962_anchor">[N1962]</link>
+                    but it is no longer required by <link linkend="N1962_anchor">[N1962]</link>
                     (because it seems to be motivated purely by optimization reasons
                     while similar performances can be achieved by disabling invariants
                     for release builds). Furthermore, in multi-threaded programs
               <entry>
                 <para>
                   Yes, contract checking can be skipped at run-time by defining combinations
-                  of the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870517808">BOOST_CONTRACT_NO_PRECONDITIONS</link></computeroutput>,
-                  <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870511440">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput>,
-                  <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870477472">BOOST_CONTRACT_NO_INVARIANTS</link></computeroutput>,
-                  <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870492704">BOOST_CONTRACT_NO_ENTRY_INVARIANTS</link></computeroutput>,
-                  and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870485088">BOOST_CONTRACT_NO_EXIT_INVARIANTS</link></computeroutput>
+                  of the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999662416">BOOST_CONTRACT_NO_PRECONDITIONS</link></computeroutput>,
+                  <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999656032">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput>,
+                  <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999622032">BOOST_CONTRACT_NO_INVARIANTS</link></computeroutput>,
+                  <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999637264">BOOST_CONTRACT_NO_ENTRY_INVARIANTS</link></computeroutput>,
+                  and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999629648">BOOST_CONTRACT_NO_EXIT_INVARIANTS</link></computeroutput>
                   macros (completely removing contract code from compiled object
-                  code is possible but requires using macros shown in <link linkend="boost_contract.extras.disable_contract_compilation__macro_interface_">Disable
+                  code is also possible but requires using macros as shown in <link linkend="boost_contract.extras.disable_contract_compilation__macro_interface_">Disable
                   Contract Compilation</link>).
                 </para>
               </entry>
         contract programming for C++ (but usually for only a limited set of features,
         or using preprocessing tools other than the C++ preprocessor and external
         to the language itself) and for other languages (see <link linkend="boost_contract.bibliography">Bibliography</link>
-        for a complete list of all the references consulted during the design and
-        development of this library):
+        for a complete list of all references consulted during the design and development
+        of this library):
       </para>
       <informaltable frame="all">
         <tgroup cols="3">
       <para>
         To the best knowledge of the authors, this the only library that fully supports
         all contract programming features for C++ (without using preprocessing tools
-        external to the language itself):
+        external to the language itself). In general:
       </para>
       <itemizedlist>
         <listitem>
         </listitem>
         <listitem>
           <simpara>
-            Implementing postcondition old values is also not too difficult usually
-            requiring programmers to copy old values into local variables, but it
+            Implementing postcondition old values is also not too difficult (usually
+            requiring programmers to copy old values into local variables), but it
             is already somewhat more difficult to ensure such copies are not performed
             when postconditions are disabled. <footnote id="boost_contract.contract_programming_overview.feature_summary.f4">
             <para>
               For example, the following pseudocode attempts to emulate old values
-              using <link linkend="P0380_anchor">[P0380]</link> (<computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">scope_exit</phrase></computeroutput>
-              here is an RAII object that executes the nullary functor passed to
-              its constructor when it is destroyed):
-<programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">void</phrase> <phrase role="identifier">fswap</phrase><phrase role="special">(</phrase><phrase role="identifier">file</phrase><phrase role="special">&amp;</phrase> <phrase role="identifier">x</phrase><phrase role="special">,</phrase> <phrase role="identifier">file</phrase><phrase role="special">&amp;</phrase> <phrase role="identifier">y</phrase><phrase role="special">)</phrase>
+              in <link linkend="P0380_anchor">[P0380]</link>:
+<programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">struct</phrase> <phrase role="identifier">scope_exit</phrase> <phrase role="special">{</phrase> <phrase role="comment">// RAII.</phrase>
+    <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> <phrase role="identifier">F</phrase><phrase role="special">&gt;</phrase>
+    <phrase role="keyword">explicit</phrase> <phrase role="identifier">scope_exit</phrase><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="identifier">f</phrase><phrase role="special">)</phrase> <phrase role="special">:</phrase> <phrase role="identifier">f_</phrase><phrase role="special">(</phrase><phrase role="identifier">f</phrase><phrase role="special">)</phrase> <phrase role="special">{}</phrase>
+    <phrase role="special">~</phrase><phrase role="identifier">scope_exit</phrase><phrase role="special">()</phrase> <phrase role="special">{</phrase> <phrase role="identifier">f_</phrase><phrase role="special">();</phrase> <phrase role="special">}</phrase>
+
+    <phrase role="identifier">scope_exit</phrase><phrase role="special">(</phrase><phrase role="identifier">scope_exit</phrase> <phrase role="keyword">const</phrase><phrase role="special">&amp;)</phrase> <phrase role="special">=</phrase> <phrase role="keyword">delete</phrase><phrase role="special">;</phrase>
+    <phrase role="identifier">scope_exit</phrase><phrase role="special">&amp;</phrase> <phrase role="keyword">operator</phrase><phrase role="special">=(</phrase><phrase role="identifier">scope_exit</phrase> <phrase role="keyword">const</phrase><phrase role="special">&amp;)</phrase> <phrase role="special">=</phrase> <phrase role="keyword">delete</phrase><phrase role="special">;</phrase>
+<phrase role="keyword">private</phrase><phrase role="special">:</phrase>
+    <phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">function</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">void</phrase> <phrase role="special">()&gt;</phrase> <phrase role="identifier">f_</phrase><phrase role="special">;</phrase>
+<phrase role="special">};</phrase>
+
+<phrase role="keyword">void</phrase> <phrase role="identifier">fswap</phrase><phrase role="special">(</phrase><phrase role="identifier">file</phrase><phrase role="special">&amp;</phrase> <phrase role="identifier">x</phrase><phrase role="special">,</phrase> <phrase role="identifier">file</phrase><phrase role="special">&amp;</phrase> <phrase role="identifier">y</phrase><phrase role="special">)</phrase>
     <phrase role="special">[[</phrase><phrase role="identifier">expects</phrase><phrase role="special">:</phrase> <phrase role="identifier">x</phrase><phrase role="special">.</phrase><phrase role="identifier">closed</phrase><phrase role="special">()]]</phrase>
-    <phrase role="special">[[</phrase><phrase role="identifier">excepts</phrase><phrase role="special">:</phrase> <phrase role="identifier">y</phrase><phrase role="special">.</phrase><phrase role="identifier">closed</phrase><phrase role="special">()]]</phrase>
-    <phrase role="comment">// Postconditions in function definition below to emulate old values.</phrase>
+    <phrase role="special">[[</phrase><phrase role="identifier">expects</phrase><phrase role="special">:</phrase> <phrase role="identifier">y</phrase><phrase role="special">.</phrase><phrase role="identifier">closed</phrase><phrase role="special">()]]</phrase>
+    <phrase role="comment">// Cannot use [[ensures]] for postconditions so to emulate old values.</phrase>
 <phrase role="special">{</phrase>
     <phrase role="identifier">file</phrase> <phrase role="identifier">old_x</phrase> <phrase role="special">=</phrase> <phrase role="identifier">x</phrase><phrase role="special">;</phrase> <phrase role="comment">// Emulate old values with local copies (not disabled).</phrase>
     <phrase role="identifier">file</phrase> <phrase role="identifier">old_y</phrase> <phrase role="special">=</phrase> <phrase role="identifier">y</phrase><phrase role="special">;</phrase>
     <phrase role="identifier">scope_exit</phrase> <phrase role="identifier">ensures</phrase><phrase role="special">([&amp;]</phrase> <phrase role="special">{</phrase> <phrase role="comment">// Check after local objects destroyed.</phrase>
-        <phrase role="keyword">if</phrase><phrase role="special">(!</phrase><phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">uncaught_exception</phrase><phrase role="special">())</phrase> <phrase role="special">{</phrase> <phrase role="comment">// Check only if no throw.</phrase>
+        <phrase role="keyword">if</phrase><phrase role="special">(</phrase><phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">uncaught_exceptions</phrase><phrase role="special">()</phrase> <phrase role="special">==</phrase> <phrase role="number">0</phrase><phrase role="special">)</phrase> <phrase role="special">{</phrase> <phrase role="comment">// Check only if no throw.</phrase>
             <phrase role="special">[[</phrase><phrase role="identifier">assert</phrase><phrase role="special">:</phrase> <phrase role="identifier">x</phrase><phrase role="special">.</phrase><phrase role="identifier">closed</phrase><phrase role="special">()]]</phrase>
             <phrase role="special">[[</phrase><phrase role="identifier">assert</phrase><phrase role="special">:</phrase> <phrase role="identifier">y</phrase><phrase role="special">.</phrase><phrase role="identifier">closed</phrase><phrase role="special">()]]</phrase>
             <phrase role="special">[[</phrase><phrase role="identifier">assert</phrase><phrase role="special">:</phrase> <phrase role="identifier">x</phrase> <phrase role="special">==</phrase> <phrase role="identifier">old_y</phrase><phrase role="special">]]</phrase>
     <phrase role="identifier">scope_exit</phrase> <phrase role="identifier">close_x</phrase><phrase role="special">([&amp;]</phrase> <phrase role="special">{</phrase> <phrase role="identifier">x</phrase><phrase role="special">.</phrase><phrase role="identifier">close</phrase><phrase role="special">();</phrase> <phrase role="special">});</phrase>
     <phrase role="identifier">y</phrase><phrase role="special">.</phrase><phrase role="identifier">open</phrase><phrase role="special">();</phrase>
     <phrase role="identifier">scope_exit</phrase> <phrase role="identifier">close_y</phrase><phrase role="special">([&amp;]</phrase> <phrase role="special">{</phrase> <phrase role="identifier">y</phrase><phrase role="special">.</phrase><phrase role="identifier">close</phrase><phrase role="special">();</phrase> <phrase role="special">});</phrase>
-    <phrase role="identifier">file</phrase> <phrase role="identifier">t</phrase> <phrase role="special">=</phrase> <phrase role="identifier">file</phrase><phrase role="special">::</phrase><phrase role="identifier">temp</phrase><phrase role="special">();</phrase>
-    <phrase role="identifier">t</phrase><phrase role="special">.</phrase><phrase role="identifier">open</phrase><phrase role="special">;</phrase>
-    <phrase role="identifier">scope_exit</phrase> <phrase role="identifier">close_t</phrase><phrase role="special">([&amp;]</phrase> <phrase role="special">{</phrase> <phrase role="identifier">t</phrase><phrase role="special">.</phrase><phrase role="identifier">close</phrase><phrase role="special">();</phrase> <phrase role="special">});</phrase>
+    <phrase role="identifier">file</phrase> <phrase role="identifier">z</phrase> <phrase role="special">=</phrase> <phrase role="identifier">file</phrase><phrase role="special">::</phrase><phrase role="identifier">temp</phrase><phrase role="special">();</phrase>
+    <phrase role="identifier">z</phrase><phrase role="special">.</phrase><phrase role="identifier">open</phrase><phrase role="special">;</phrase>
+    <phrase role="identifier">scope_exit</phrase> <phrase role="identifier">close_z</phrase><phrase role="special">([&amp;]</phrase> <phrase role="special">{</phrase> <phrase role="identifier">z</phrase><phrase role="special">.</phrase><phrase role="identifier">close</phrase><phrase role="special">();</phrase> <phrase role="special">});</phrase>
 
-    <phrase role="identifier">x</phrase><phrase role="special">.</phrase><phrase role="identifier">mv</phrase><phrase role="special">(</phrase><phrase role="identifier">t</phrase><phrase role="special">);</phrase>
+    <phrase role="identifier">x</phrase><phrase role="special">.</phrase><phrase role="identifier">mv</phrase><phrase role="special">(</phrase><phrase role="identifier">z</phrase><phrase role="special">);</phrase>
     <phrase role="identifier">y</phrase><phrase role="special">.</phrase><phrase role="identifier">mv</phrase><phrase role="special">(</phrase><phrase role="identifier">x</phrase><phrase role="special">);</phrase>
-    <phrase role="identifier">t</phrase><phrase role="special">.</phrase><phrase role="identifier">mv</phrase><phrase role="special">(</phrase><phrase role="identifier">y</phrase><phrase role="special">);</phrase>
+    <phrase role="identifier">z</phrase><phrase role="special">.</phrase><phrase role="identifier">mv</phrase><phrase role="special">(</phrase><phrase role="identifier">y</phrase><phrase role="special">);</phrase>
 <phrase role="special">}</phrase>
 </programlisting>
               This requires boiler-plate code to make sure postconditions are correctly
               other local objects have been destroyed (because some of these destructors
               contribute to establishing the postconditions). Still, it never disables
               old value copies (not even if postconditions are disabled in release
-              builds).
+              builds, this would require adding even more boiler-plate code using
+              <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="preprocessor">#ifdef</phrase></computeroutput>, etc.).
             </para>
             </footnote>
           </simpara>
             the invariants). <footnote id="boost_contract.contract_programming_overview.feature_summary.f5">
             <para>
               For example, the following pseudocode attempts to emulation of class
-              invariants using <link linkend="P0380_anchor">[P0380]</link>:
+              invariants in <link linkend="P0380_anchor">[P0380]</link>:
 <programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> <phrase role="identifier">T</phrase><phrase role="special">&gt;</phrase>
 <phrase role="keyword">class</phrase> <phrase role="identifier">vector</phrase> <phrase role="special">{</phrase>
     <phrase role="keyword">bool</phrase> <phrase role="identifier">invariant</phrase><phrase role="special">()</phrase> <phrase role="keyword">const</phrase> <phrase role="special">{</phrase>        <phrase role="comment">// Check invariants at...</phrase>
               to check class invariants (because <link linkend="P0380_anchor">[P0380]</link>
               does not automatically disable assertions while checking other assertions).
             </para>
-            </footnote> All references reviewed by the authors seem to not consider
-            static and volatile functions not supporting static and volatile invariants
-            respectively.
+            </footnote> In addition, all references reviewed by the authors seem
+            to not consider static and volatile functions not supporting static and
+            volatile invariants respectively.
           </simpara>
         </listitem>
         <listitem>
   <section id="boost_contract.tutorial">
     <title><link linkend="boost_contract.tutorial">Tutorial</link></title>
     <para>
-      This section is a guide to basic usages of this library.
+      This section is a guide to basic usage of this library.
     </para>
     <section id="boost_contract.tutorial.non_member_functions">
       <title><link linkend="boost_contract.tutorial.non_member_functions">Non-Member
         The <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.function">boost::contract::function</link></computeroutput>
         function returns an RAII object that must always be assigned to a local variable
         of type <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.check">boost::contract::check</link></computeroutput>
-        (otherwise this library will generate a run-time error, see <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870548928">BOOST_CONTRACT_ON_MISSING_CHECK_DECL</link></computeroutput>).
+        (otherwise this library will generate a run-time error, see <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999694064">BOOST_CONTRACT_ON_MISSING_CHECK_DECL</link></computeroutput>).
         <footnote id="boost_contract.tutorial.non_member_functions.f0">
         <para>
           The name of this local variable is arbitrary, but <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">c</phrase></computeroutput>
           is often used in this documentation for <quote>c</quote>heck or <quote>c</quote>aminiti
-          <literal moreinfo="none">;-)</literal>.
+          <literal moreinfo="none">;-)</literal> .
         </para>
         </footnote> Furthermore, C++11 <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">auto</phrase></computeroutput>
         declarations cannot be used here and the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.check">boost::contract::check</link></computeroutput>
         type must be explicitly specified (otherwise this library will generate a
         compile-time error prior C++17 and a run-time error post C++17). <footnote id="boost_contract.tutorial.non_member_functions.f1">
         <para>
-          <emphasis role="bold">Rationale:</emphasis> C++17 zero-copy guarantee on
-          function return values skips the trick this library uses to force a compile-time
+          <emphasis role="bold">Rationale:</emphasis> C++17 guaranteed copy elision
+          on function return value voids the trick this library uses to force a compile-time
           error when <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">auto</phrase></computeroutput> is incorrectly
           used instead of <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.check">boost::contract::check</link></computeroutput>.
-          The library is still able to generate a run-time error in this case on
-          C++17. In any case, after reading this documentation it should be evident
-          to programmers that <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">auto</phrase></computeroutput> should
-          not be used in <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.check">boost::contract::check</link></computeroutput>
+          The library still generates a run-time error in this case (also on C++17).
+          In any case, after reading this documentation it should be evident to programmers
+          that <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">auto</phrase></computeroutput> should not be used
+          in <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.check">boost::contract::check</link></computeroutput>
           declarations so this misuse of <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">auto</phrase></computeroutput>
           should not be an issue in practice.
         </para>
         </footnote> The function body is programmed right after the declaration of
-        the RAII object.
+        this RAII object.
       </para>
       <note>
         <para>
       <para>
         When preconditions are specified, they are programmed using a functor <literal moreinfo="none"><emphasis>r</emphasis></literal>
         passed to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">.</phrase><phrase role="identifier">precondition</phrase><phrase role="special">(</phrase></computeroutput><literal moreinfo="none"><emphasis>r</emphasis></literal><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">)</phrase></computeroutput> that can be called with no parameters as
-        <literal moreinfo="none"><emphasis>r</emphasis></literal><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">()</phrase></computeroutput>.
+        in <literal moreinfo="none"><emphasis>r</emphasis></literal><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">()</phrase></computeroutput>.
         Contracts that do not have preconditions simply do not call <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">.</phrase><phrase role="identifier">precondition</phrase><phrase role="special">(...)</phrase></computeroutput>. Preconditions must appear before postconditions
         and exception guarantees when these are all present (see <link linkend="boost_contract.tutorial.postconditions">Postconditions</link>
         and <link linkend="boost_contract.tutorial.exception_guarantees">Exception
           In this documentation preconditions often capture variables by reference
           to avoid extra copies.
         </para>
-        </footnote> In any case, precondition assertions should not modify the value
-        of the captured variables, even when those are captured by reference (see
-        <link linkend="boost_contract.contract_programming_overview.constant_correctness">Constant-Correctness</link>).
+        </footnote> In any case, programmers should not write precondition assertions
+        that modify the value of the captured variables, even when those are captured
+        by reference (see <link linkend="boost_contract.contract_programming_overview.constant_correctness">Constant-Correctness</link>).
       </para>
       <para>
         Any code can be programmed in the precondition functor, but it is recommended
         at run-time). It is also recommended to use <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput>
         to program precondition assertions because that enables this library to print
         informative error messages when the asserted conditions are evaluated to
-        be false (this is not a variadic macro, see <link linkend="boost_contract.extras.no_macros__and_no_variadic_macros_">No
+        be false (note that this is not a variadic macro, see <link linkend="boost_contract.extras.no_macros__and_no_variadic_macros_">No
         Macros</link>):
       </para>
-<programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">bool_cond</phrase><phrase role="special">)</phrase>
-<phrase role="comment">// Or, if `bool_cond` contains commas `,` not already within parenthesis `()`...</phrase>
-<phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">((</phrase><phrase role="identifier">bool_cond</phrase><phrase role="special">))</phrase> <phrase role="comment">// ...use extra parenthesis (not a variadic macro).</phrase>
+<programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><literal moreinfo="none"><emphasis>boolean-condition</emphasis></literal><phrase role="special">)</phrase>
+<phrase role="comment">// Or, if `boolean-condition` contains commas `,` not already within parenthesis `()`...</phrase>
+<phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">((</phrase><literal moreinfo="none"><emphasis>boolean-condition</emphasis></literal><phrase role="special">))</phrase> <phrase role="comment">// ...use extra parenthesis (not a variadic macro).</phrase>
 </programlisting>
       <para>
         This library will automatically call the failure handler <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.precondition_failure">boost::contract::precondition_failure</link></computeroutput>
         if any of the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput>
-        conditions are false and, more in general, if calling the functor specified
+        conditions are false or, more in general, if calling the functor specified
         via <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">.</phrase><phrase role="identifier">precondition</phrase><phrase role="special">(...)</phrase></computeroutput> throws any exception. By default, this
         failure handler prints an error message to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">cerr</phrase></computeroutput>
         and terminates the program calling <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">terminate</phrase></computeroutput>
       <para>
         When postconditions are specified, they are programmed using a functor <literal moreinfo="none"><emphasis>s</emphasis></literal>
         passed to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">.</phrase><phrase role="identifier">postcondition</phrase><phrase role="special">(</phrase></computeroutput><literal moreinfo="none"><emphasis>s</emphasis></literal><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">)</phrase></computeroutput> that can be called with no parameters as
-        <literal moreinfo="none"><emphasis>s</emphasis></literal><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">()</phrase></computeroutput>.
+        in <literal moreinfo="none"><emphasis>s</emphasis></literal><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">()</phrase></computeroutput>.
         Contracts that do not have postconditions simply do not call <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">.</phrase><phrase role="identifier">postcondition</phrase><phrase role="special">(...)</phrase></computeroutput>. Postconditions must appear after preconditions
         but before exception guarantees when these are all present (see <link linkend="boost_contract.tutorial.preconditions">Preconditions</link>
         and <link linkend="boost_contract.tutorial.exception_guarantees">Exception
 <phrase role="special">}</phrase>
 </programlisting>
       <para>
-        The postcondition functor should capture all variables that it needs to assert
-        the postconditions. In general, these variables should be captured by reference
-        and not by value (because postconditions need to access the value that these
-        variables will have at function exit, and not the value these variables had
-        when the postcondition functor was first constructed). Postconditions can
-        also capture return and old values (see <link linkend="boost_contract.tutorial.return_values">Return
+        The postcondition functor should capture all the variables that it needs
+        to assert the postconditions. In general, these variables should be captured
+        by reference and not by value (because postconditions need to access the
+        value that these variables will have at function exit, and not the value
+        these variables had when the postcondition functor was first declared). Postconditions
+        can also capture return and old values (see <link linkend="boost_contract.tutorial.return_values">Return
         Values</link> and <link linkend="boost_contract.tutorial.old_values">Old
-        Values</link>). In any case, postcondition assertions should not modify the
-        value of the captured variables (see <link linkend="boost_contract.contract_programming_overview.constant_correctness">Constant-Correctness</link>).
+        Values</link>). In any case, programmers should not write postcondition assertions
+        that modify the value of the captured variables, even when those are captured
+        by reference (see <link linkend="boost_contract.contract_programming_overview.constant_correctness">Constant-Correctness</link>).
       </para>
       <para>
         Any code can be programmed in the postcondition functor, but it is recommended
         at run-time). It is also recommended to use <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput>
         to program postcondition assertions because that enables this library to
         print informative error messages when the asserted conditions are evaluated
-        to be false (this is not a variadic macro, see <link linkend="boost_contract.extras.no_macros__and_no_variadic_macros_">No
+        to be false (note that this is not a variadic macro, see <link linkend="boost_contract.extras.no_macros__and_no_variadic_macros_">No
         Macros</link>):
       </para>
-<programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">bool_cond</phrase><phrase role="special">)</phrase>
-<phrase role="comment">// Or, if `bool_cond` has commas `,` not already within parenthesis `()`...</phrase>
-<phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">((</phrase><phrase role="identifier">bool_cond</phrase><phrase role="special">))</phrase> <phrase role="comment">// ...use extra parenthesis (not a variadic macro).</phrase>
+<programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><literal moreinfo="none"><emphasis>boolean-condition</emphasis></literal><phrase role="special">)</phrase>
+<phrase role="comment">// Or, if `boolean-condition` has commas `,` not already within parenthesis `()`...</phrase>
+<phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">((</phrase><literal moreinfo="none"><emphasis>boolean-condition</emphasis></literal><phrase role="special">))</phrase> <phrase role="comment">// ...use extra parenthesis (not a variadic macro).</phrase>
 </programlisting>
       <para>
         This library will automatically call the failure handler <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.postcondition_failure">boost::contract::postcondition_failure</link></computeroutput>
         if any of the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput>
-        conditions are false and, more in general, if calling the functor specified
+        conditions are false or, more in general, if calling the functor specified
         via <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">.</phrase><phrase role="identifier">postcondition</phrase><phrase role="special">(...)</phrase></computeroutput> throws any exception. By default, this
         failure handler prints an error message to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">cerr</phrase></computeroutput>
         and terminates the program calling <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">terminate</phrase></computeroutput>
         the program with an error code, etc.).
       </para>
       <para>
-        For non-void virtual public functions and public function overrides, the
-        functor <literal moreinfo="none"><emphasis>s</emphasis></literal> passed to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">.</phrase><phrase role="identifier">postcondition</phrase><phrase role="special">(</phrase></computeroutput><literal moreinfo="none"><emphasis>s</emphasis></literal><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">)</phrase></computeroutput> is not a nullary functor, instead it is
+        For non-void virtual public functions and non-void public function overrides,
+        the functor <literal moreinfo="none"><emphasis>s</emphasis></literal> passed to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">.</phrase><phrase role="identifier">postcondition</phrase><phrase role="special">(</phrase></computeroutput><literal moreinfo="none"><emphasis>s</emphasis></literal><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">)</phrase></computeroutput> is not a nullary functor, instead it is
         a unary functor taking a variable holding the return value as its one parameter
         <literal moreinfo="none"><emphasis>s</emphasis></literal><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">(</phrase></computeroutput><literal moreinfo="none"><emphasis>result</emphasis></literal><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">)</phrase></computeroutput> (this is to properly support subcontracting,
         see <link linkend="boost_contract.tutorial.virtual_public_functions">Virtual
     <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">check</phrase> <phrase role="identifier">c</phrase> <phrase role="special">=</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">function</phrase><phrase role="special">()</phrase>  <phrase role="comment">// Same for all other contracts.</phrase>
         <phrase role="special">...</phrase>
         <phrase role="special">.</phrase><phrase role="identifier">postcondition</phrase><phrase role="special">([&amp;]</phrase> <phrase role="special">{</phrase>                                <phrase role="comment">// Also capture `result` reference...</phrase>
-            <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">result</phrase> <phrase role="special">...);</phrase>              <phrase role="comment">// ...but should not modify captures.</phrase>
+            <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">result</phrase> <phrase role="special">==</phrase> <phrase role="special">...);</phrase>           <phrase role="comment">// ...but should not modify captures.</phrase>
             <phrase role="special">...</phrase>
         <phrase role="special">})</phrase>
         <phrase role="special">...</phrase>
     <phrase role="special">;</phrase>
 
-    <phrase role="special">...</phrase>                                                     <phrase role="comment">// Assign `result` at each return.</phrase>
+    <phrase role="special">...</phrase>
+    <phrase role="keyword">return</phrase> <phrase role="identifier">result</phrase> <phrase role="special">=</phrase> <phrase role="special">...;</phrase>                                    <phrase role="comment">// Assign `result` at each return.</phrase>
 <phrase role="special">}</phrase>
 </programlisting>
       <para>
         be done ensuring that <emphasis>all</emphasis> <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">return</phrase></computeroutput>
         statements in the function are of the form:
       </para>
-<programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">return</phrase> <phrase role="identifier">result</phrase> <phrase role="special">=</phrase> <phrase role="identifier">return_expr</phrase><phrase role="special">;</phrase>                                <phrase role="comment">// Assign `result` at each return.</phrase>
+<programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><literal moreinfo="none"><emphasis>return-type</emphasis></literal> <phrase role="identifier">result</phrase><phrase role="special">;</phrase>
+<phrase role="special">...</phrase>
+<phrase role="keyword">return</phrase> <phrase role="identifier">result</phrase> <phrase role="special">=</phrase> <literal moreinfo="none"><emphasis>return-expression</emphasis></literal><phrase role="special">;</phrase>                           <phrase role="comment">// Assign `result` at each return.</phrase>
 </programlisting>
       <para>
         The functor used to program postconditions should capture the result variable
         by reference and not by value (because postconditions must access the value
         the result variable will have at function exit, and not the value the result
-        variable had when the postcondition functor was first constructed). The return
+        variable had when the postcondition functor was first declared). The return
         value should never be used in preconditions, old value copies, or exception
         guarantees (because the return value is not yet correctly evaluated and set
         when preconditions are checked, old values are copied, or if the function
         Return Values</link>).
       </para>
       <para>
-        Non-void virtual public functions and public function overrides must always
-        declare and use a result variable even when postconditions do not directly
-        use the function return value (this is to properly support subcontracting,
+        Non-void virtual public functions and non-void public function overrides
+        must always declare and use a result variable even when postconditions do
+        not directly use the function return value (this is to properly support subcontracting,
         see <link linkend="boost_contract.tutorial.virtual_public_functions">Virtual
         Public Functions</link> and <link linkend="boost_contract.tutorial.public_function_overrides__subcontracting_">Public
         Function Overrides</link>).
     <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">check</phrase> <phrase role="identifier">c</phrase> <phrase role="special">=</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">function</phrase><phrase role="special">()</phrase>  <phrase role="comment">// Same for all other contracts.</phrase>
         <phrase role="special">...</phrase>                                                 <phrase role="comment">// Preconditions shall not use old values.</phrase>
         <phrase role="special">.</phrase><phrase role="identifier">postcondition</phrase><phrase role="special">([&amp;]</phrase> <phrase role="special">{</phrase>                                <phrase role="comment">// Capture by reference...</phrase>
-            <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(*</phrase><phrase role="identifier">old_var</phrase> <phrase role="special">...);</phrase>            <phrase role="comment">// ...but should not modify captures.</phrase>
+            <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(*</phrase><phrase role="identifier">old_var</phrase> <phrase role="special">==</phrase> <phrase role="special">...);</phrase>         <phrase role="comment">// ...but should not modify captures.</phrase>
             <phrase role="special">...</phrase>
         <phrase role="special">})</phrase>
         <phrase role="special">.</phrase><phrase role="identifier">except</phrase><phrase role="special">([&amp;]</phrase> <phrase role="special">{</phrase>                                       <phrase role="comment">// Capture by reference...</phrase>
           <emphasis role="bold">Rationale:</emphasis> Old values have to be optional
           values because they need to be left uninitialized when they are not used
           because both postconditions and exception guarantees are disabled (defining
-          <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870511440">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput>
+          <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999656032">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput>
           and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_NO_EXCEPTS">BOOST_CONTRACT_NO_EXCEPTS</link></computeroutput>).
-          That is to avoid old value copies when old values are not used, so a pointer,
-          or better a <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">optional</phrase></computeroutput>, could have been used for that.
-          In addition, old values need to be pointers internally allocated by this
-          library so that they are never copied twice even when calling an overridden
-          function multiple times to check preconditions, postconditions, etc. to
-          implement subcontracting, so a smart pointer class template was used.
+          That is to avoid old value copies when old values are not used, either
+          a pointer or (better) a <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">optional</phrase></computeroutput>
+          could have been used to achieve that. In addition, old values need to be
+          pointers internally allocated by this library so that they are never copied
+          twice even when calling an overridden function multiple times to check
+          preconditions, postconditions, etc. to implement subcontracting, so a smart
+          pointer class template was used.
         </para>
         </footnote> The pointed old value type is automatically qualified as <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">const</phrase></computeroutput> (so old values cannot be mistakenly
         changed by contract assertions, see <link linkend="boost_contract.contract_programming_overview.constant_correctness">Constant-Correctness</link>).
         are checked. <footnote id="boost_contract.tutorial.old_values.f2">
         <para>
           For example, old value pointers might be null in preconditions when postconditions
-          and exception guarantees are disabled defining <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870511440">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput>
-          and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_NO_EXCEPTS">BOOST_CONTRACT_NO_EXCEPTS</link></computeroutput>,
-          but also when checking an overridden virtual public function contract via
-          subcontracting, etc.
+          and exception guarantees are disabled defining <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999656032">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput>
+          and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_NO_EXCEPTS">BOOST_CONTRACT_NO_EXCEPTS</link></computeroutput>
+          (but also when checking an overridden virtual public function contract
+          via subcontracting, etc.).
         </para>
-        </footnote> See <link linkend="boost_contract.advanced.old_value_copies_at_body">Old
-        Value Copies at Body</link> for delaying the copy of old values until after
+        </footnote> See <link linkend="boost_contract.advanced.old_values_copied_at_body">Old
+        Values Copied at Body</link> for delaying the copy of old values until after
         class invariants (for constructors, destructors, and public functions) and
-        preconditions are checked (this allows to program old value expressions under
-        the simplifying assumption that class invariant and precondition assertions
-        are satisfied already).
+        preconditions are checked (when necessary, this allows to program old value
+        expressions under the simplifying assumption that class invariant and precondition
+        assertions are satisfied already).
       </para>
       <para>
         <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OLDOF">BOOST_CONTRACT_OLDOF</link></computeroutput> is
         Public Functions</link> and <link linkend="boost_contract.tutorial.public_function_overrides__subcontracting_">Public
         Function Overrides</link>). C++11 auto declarations can be used with <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OLDOF">BOOST_CONTRACT_OLDOF</link></computeroutput> for brevity
         <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">auto</phrase> </computeroutput><literal moreinfo="none">old_<emphasis>variable-name</emphasis>
-        = BOOST_CONTRACT_OLDOF(<emphasis>expression</emphasis>)</literal>. See <link linkend="boost_contract.extras.no_macros__and_no_variadic_macros_">No Macros</link>
-        to program old values without using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OLDOF">BOOST_CONTRACT_OLDOF</link></computeroutput>
+        = BOOST_CONTRACT_OLDOF(<emphasis>expression</emphasis>)</literal> (but see
+        also <link linkend="boost_contract.extras.old_value_requirements__templates_">Old
+        Value Requirements</link>). See <link linkend="boost_contract.extras.no_macros__and_no_variadic_macros_">No
+        Macros</link> to program old values without using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OLDOF">BOOST_CONTRACT_OLDOF</link></computeroutput>
         (e.g., on compilers that do not support variadic macros).
       </para>
       <note>
         <para>
           This library ensures that old values are copied only once. This library
           also ensures that old values are never copied when postconditions and exception
-          guarantees are disabled defining both <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870511440">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput>
+          guarantees are disabled defining both <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999656032">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput>
           and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_NO_EXCEPTS">BOOST_CONTRACT_NO_EXCEPTS</link></computeroutput>
-          (note that both these two macros must be defined, defining only <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870511440">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput>
+          (note that both these two macros must be defined, defining only <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999656032">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput>
           or only <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_NO_EXCEPTS">BOOST_CONTRACT_NO_EXCEPTS</link></computeroutput>
           is not sufficient to prevent the run-time cost of old value copies).
         </para>
       <para>
         When exception guarantees are specified, they are programmed using a functor
         <literal moreinfo="none"><emphasis>e</emphasis></literal> passed to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">.</phrase><phrase role="identifier">except</phrase><phrase role="special">(</phrase></computeroutput><literal moreinfo="none"><emphasis>e</emphasis></literal><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">)</phrase></computeroutput> that can be called with no parameters as
-        <literal moreinfo="none"><emphasis>e</emphasis></literal><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">()</phrase></computeroutput>.
+        in <literal moreinfo="none"><emphasis>e</emphasis></literal><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">()</phrase></computeroutput>.
         Contracts that do not have exception guarantees simply do not call <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">.</phrase><phrase role="identifier">except</phrase><phrase role="special">(...)</phrase></computeroutput>. Exception guarantees must appear after
         both preconditions and postconditions when these are all present (see <link linkend="boost_contract.tutorial.preconditions">Preconditions</link> and
         <link linkend="boost_contract.tutorial.postconditions">Postconditions</link>).
 <phrase role="special">}</phrase>
 </programlisting>
       <para>
-        The exception guarantee functor should capture all variables that it needs
-        to assert the exception guarantees. In general, these variables should be
-        captured by reference and not by value (because exception guarantees need
+        The exception guarantee functor should capture all the variables that it
+        needs to assert the exception guarantees. In general, these variables should
+        be captured by reference and not by value (because exception guarantees need
         to access the value that these variables will have when the function throws,
         and not the value these variables had when the exception guarantee functor
-        was first constructed). Exception guarantees can also capture old values
-        (see <link linkend="boost_contract.tutorial.old_values">Old Values</link>)
-        but they should not access the function return value instead (because the
-        return value will not be properly set when the function throws an exception).
-        In any case, exception guarantee assertions should not modify the value of
-        the captured variables (see <link linkend="boost_contract.contract_programming_overview.constant_correctness">Constant-Correctness</link>).
+        was first declared). Exception guarantees can also capture old values (see
+        <link linkend="boost_contract.tutorial.old_values">Old Values</link>) but
+        they should not access the function return value instead (because the return
+        value is not be properly set when the function throws an exception). In any
+        case, programmers should not write exception guarantee assertions that modify
+        the value of the captured variables, even when those are captured by reference
+        (see <link linkend="boost_contract.contract_programming_overview.constant_correctness">Constant-Correctness</link>).
       </para>
       <note>
         <para>
-          In real code, it might be difficult to program meaningful exception guarantees
-          without resorting to expensive old value copies that will slow down execution.
-          Therefore, the authors recognize that exception guarantees, even if supported
-          by this library, might not be used often in practice (and they are not
-          used in most of the examples listed in the rest of this documentation).
-          In any case, these performance considerations are ultimately left to programmers
-          and their specific application domain.
+          In real production code, it might be difficult to program meaningful exception
+          guarantees without resorting to expensive old value copies that will slow
+          down execution. Therefore, the authors recognize that exception guarantees,
+          even if supported by this library, might not be used often in practice
+          (and they are not used in most of the examples listed in the rest of this
+          documentation). In any case, these performance considerations are ultimately
+          left to programmers and their specific application domains.
         </para>
       </note>
       <para>
         slow to check at run-time). It is also recommended to use <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput>
         to program exception guarantee assertions because that enables this library
         to print informative error messages when the asserted conditions are evaluated
-        to be false (this is not a variadic macro, see <link linkend="boost_contract.extras.no_macros__and_no_variadic_macros_">No
+        to be false (note that this is not a variadic macro, see <link linkend="boost_contract.extras.no_macros__and_no_variadic_macros_">No
         Macros</link>):
       </para>
-<programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">bool_cond</phrase><phrase role="special">)</phrase>
-<phrase role="comment">// Or, if `bool_cond` has commas `,` not already within parenthesis `()`...</phrase>
-<phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">((</phrase><phrase role="identifier">bool_cond</phrase><phrase role="special">))</phrase> <phrase role="comment">// ...use extra parenthesis (not a variadic macro).</phrase>
+<programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><literal moreinfo="none"><emphasis>boolean-condition</emphasis></literal><phrase role="special">)</phrase>
+<phrase role="comment">// Or, if `boolean-condition` has commas `,` not already within parenthesis `()`...</phrase>
+<phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">((</phrase><literal moreinfo="none"><emphasis>boolean-condition</emphasis></literal><phrase role="special">))</phrase> <phrase role="comment">// ...use extra parenthesis (not a variadic macro).</phrase>
 </programlisting>
       <para>
         This library will automatically call the failure handler <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.except_failure">boost::contract::except_failure</link></computeroutput>
         if any of the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput>
-        conditions are false and, more in general, if calling the functor specified
+        conditions are false or, more in general, if calling the functor specified
         via <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">.</phrase><phrase role="identifier">except</phrase><phrase role="special">(...)</phrase></computeroutput> throws any exception. By default, this
         failure handler prints an error message to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">cerr</phrase></computeroutput>
         and terminates the program calling <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">terminate</phrase></computeroutput>
       <title><link linkend="boost_contract.tutorial.class_invariants">Class Invariants</link></title>
       <para>
         Public member functions, constructors, and destructors can be programmed
-        to check class invariants. When class invariants are specified, they are
-        programmed in a public <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">const</phrase></computeroutput>
+        to also check class invariants. When class invariants are specified, they
+        are programmed in a public <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">const</phrase></computeroutput>
         function named <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">invariant</phrase></computeroutput>
         taking no argument and returning <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">void</phrase></computeroutput>.
         Classes that do not have invariants, simply do not declare the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">invariant</phrase></computeroutput> function. <footnote id="boost_contract.tutorial.class_invariants.f0">
         <para>
           This library uses template meta-programming (SFINAE-based introspection
           techniques) to check invariants only for classes that declare a member
-          function named <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870579312">BOOST_CONTRACT_INVARIANT_FUNC</link></computeroutput>.
+          function named by <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999724496">BOOST_CONTRACT_INVARIANT_FUNC</link></computeroutput>.
         </para>
         </footnote> For example:
       </para>
         and if-statements (to avoid programming complex invariants that might be
         buggy and slow to check at run-time). It is also recommended to use <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput> to program
         class invariant assertions because that enables this library to print informative
-        error messages when the asserted conditions are evaluated to be false (this
-        is not a variadic macro, see <link linkend="boost_contract.extras.no_macros__and_no_variadic_macros_">No
+        error messages when the asserted conditions are evaluated to be false (note
+        that this is not a variadic macro, see <link linkend="boost_contract.extras.no_macros__and_no_variadic_macros_">No
         Macros</link>):
       </para>
-<programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">bool_cond</phrase><phrase role="special">)</phrase>
-<phrase role="comment">// Or, if `bool_cond` has commas `,` not already within parenthesis `()`...</phrase>
-<phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">((</phrase><phrase role="identifier">bool_cond</phrase><phrase role="special">))</phrase> <phrase role="comment">// ...use extra parenthesis (not a variadic macro).</phrase>
+<programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><literal moreinfo="none"><emphasis>boolean-condition</emphasis></literal><phrase role="special">)</phrase>
+<phrase role="comment">// Or, if `boolean-condition` has commas `,` not already within parenthesis `()`...</phrase>
+<phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">((</phrase><literal moreinfo="none"><emphasis>boolean-condition</emphasis></literal><phrase role="special">))</phrase> <phrase role="comment">// ...use extra parenthesis (not a variadic macro).</phrase>
 </programlisting>
       <para>
         This library will automatically call failure handlers <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.entry_invariant_failure">boost::contract::entry_invariant_failure</link></computeroutput>
         or <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.exit_invariant_failure">boost::contract::exit_invariant_failure</link></computeroutput>
         if any of the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput>
-        conditions are false and, more in general, if the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">invariant</phrase></computeroutput>
+        conditions are false or, more in general, if the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">invariant</phrase></computeroutput>
         function throws an exception when invariants are checked at function entry
         or exit respectively. By default, these handlers print an error message to
         <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">cerr</phrase></computeroutput> and terminate the program calling
           as explained in <link linkend="boost_contract.advanced.access_specifiers">Access
           Specifiers</link>).
         </para>
-        </footnote> See <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870579312">BOOST_CONTRACT_INVARIANT_FUNC</link></computeroutput>
+        </footnote> See <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999724496">BOOST_CONTRACT_INVARIANT_FUNC</link></computeroutput>
         to use a name different from <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">invariant</phrase></computeroutput>
         (e.g., because <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">invariant</phrase></computeroutput>
         clashes with other names in user-defined classes).
         <para>
           This library uses template meta-programming (SFINAE-based introspection
           techniques) to check static invariants only for classes that declare a
-          member function named <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870569600">BOOST_CONTRACT_STATIC_INVARIANT_FUNC</link></computeroutput>.
+          member function named by <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999714768">BOOST_CONTRACT_STATIC_INVARIANT_FUNC</link></computeroutput>.
         </para>
         </footnote> For example:
       </para>
         and if-statements (to avoid programming complex static invariants that might
         be buggy and slow to check at run-time). It is also recommended to use <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput> to program
         the assertions because that enables this library to print informative error
-        messages when the asserted conditions are evaluated to be false (this is
-        not a variadic macro, see <link linkend="boost_contract.extras.no_macros__and_no_variadic_macros_">No
+        messages when the asserted conditions are evaluated to be false (note that
+        this is not a variadic macro, see <link linkend="boost_contract.extras.no_macros__and_no_variadic_macros_">No
         Macros</link>):
       </para>
-<programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">bool_cond</phrase><phrase role="special">)</phrase>
-<phrase role="comment">// Or, if condition has commas `,` not already within parenthesis `()`...</phrase>
-<phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">((</phrase><phrase role="identifier">bool_cond</phrase><phrase role="special">))</phrase> <phrase role="comment">// ...use extra parenthesis (not a variadic macro).</phrase>
+<programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><literal moreinfo="none"><emphasis>boolean-condition</emphasis></literal><phrase role="special">)</phrase>
+<phrase role="comment">// Or, if `boolean-condition` has commas `,` not already within parenthesis `()`...</phrase>
+<phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">((</phrase><literal moreinfo="none"><emphasis>boolean-condition</emphasis></literal><phrase role="special">))</phrase> <phrase role="comment">// ...use extra parenthesis (not a variadic macro).</phrase>
 </programlisting>
       <para>
         This library will automatically call failure handlers <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.entry_invariant_failure">boost::contract::entry_invariant_failure</link></computeroutput>
         or <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.exit_invariant_failure">boost::contract::exit_invariant_failure</link></computeroutput>
         if any of the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput>
-        conditions are false and, more in general, if the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">static_invariant</phrase></computeroutput>
+        conditions are false or, more in general, if the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">static_invariant</phrase></computeroutput>
         function throws an exception when invariants are checked at function entry
         or exit respectively. By default, these handlers print an error message to
         <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">cerr</phrase></computeroutput> and terminate the program calling
           as explained in <link linkend="boost_contract.advanced.access_specifiers">Access
           Specifiers</link>).
         </para>
-        </footnote> See <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870569600">BOOST_CONTRACT_STATIC_INVARIANT_FUNC</link></computeroutput>
+        </footnote> See <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999714768">BOOST_CONTRACT_STATIC_INVARIANT_FUNC</link></computeroutput>
         to use a name different from <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">static_invariant</phrase></computeroutput>
         (e.g., because <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">static_invariant</phrase></computeroutput>
         clashes with other names in user-defined classes). <footnote id="boost_contract.tutorial.class_invariants.f4">
           to overload a member function based on the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">static</phrase></computeroutput>
           classifier. Therefore, this library has to use different names for the
           member functions checking non-static and static class invariants (namely
-          for <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870579312">BOOST_CONTRACT_INVARIANT_FUNC</link></computeroutput>
-          and for <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870569600">BOOST_CONTRACT_STATIC_INVARIANT_FUNC</link></computeroutput>).
+          for <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999724496">BOOST_CONTRACT_INVARIANT_FUNC</link></computeroutput>
+          and for <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999714768">BOOST_CONTRACT_STATIC_INVARIANT_FUNC</link></computeroutput>).
         </para>
         </footnote>
       </para>
     <phrase role="comment">// Contract for a constructor.</phrase>
     <phrase role="identifier">unique_identifiers</phrase><phrase role="special">(</phrase><phrase role="keyword">int</phrase> <phrase role="identifier">from</phrase><phrase role="special">,</phrase> <phrase role="keyword">int</phrase> <phrase role="identifier">to</phrase><phrase role="special">)</phrase> <phrase role="special">:</phrase>
         <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">constructor_precondition</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">unique_identifiers</phrase><phrase role="special">&gt;([&amp;]</phrase> <phrase role="special">{</phrase>
-            <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">from</phrase> <phrase role="special">&lt;=</phrase> <phrase role="identifier">to</phrase><phrase role="special">);</phrase>
+            <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">from</phrase> <phrase role="special">&gt;=</phrase> <phrase role="number">0</phrase><phrase role="special">);</phrase>
+            <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">to</phrase> <phrase role="special">&gt;=</phrase> <phrase role="identifier">from</phrase><phrase role="special">);</phrase>
         <phrase role="special">})</phrase>
     <phrase role="special">{</phrase>
         <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">check</phrase> <phrase role="identifier">c</phrase> <phrase role="special">=</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">constructor</phrase><phrase role="special">(</phrase><phrase role="keyword">this</phrase><phrase role="special">)</phrase>
         It is not possible to specify preconditions using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">.</phrase><phrase role="identifier">precondition</phrase><phrase role="special">(...)</phrase></computeroutput>
         for constructors (this library will generate a compile-time error if <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">.</phrase><phrase role="identifier">precondition</phrase><phrase role="special">(...)</phrase></computeroutput> is used on the object returned by <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.constructor">boost::contract::constructor</link></computeroutput>).
         Constructor preconditions are specified using the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.constructor_precondition">boost::contract::constructor_precondition</link></computeroutput>
-        base class instead (but considerations from <link linkend="boost_contract.tutorial.preconditions">Preconditions</link>
+        base class instead (same considerations as the ones made in <link linkend="boost_contract.tutorial.preconditions">Preconditions</link>
         apply also to the precondition functor passed to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.constructor_precondition">boost::contract::constructor_precondition</link></computeroutput>).
         Programmes should not access the object <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">*</phrase><phrase role="keyword">this</phrase></computeroutput> from constructor preconditions (because
         the object does not exists yet before the constructor body is executed).
         </listitem>
         <listitem>
           <simpara>
-            It takes the derived class as template parameter (the Curiously Recursive
-            Template Pattern (CRTP) is used here to avoid ambiguity resolution errors
-            with multiple inheritance). <footnote id="boost_contract.tutorial.constructors.f2">
+            It should never be declared as a <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">virtual</phrase></computeroutput>
+            base (because virtual bases are initialized only once across the entire
+            inheritance hierarchy preventing preconditions of other base classes
+            from being checked).
+          </simpara>
+        </listitem>
+        <listitem>
+          <simpara>
+            It takes the derived class as template parameter. <footnote id="boost_contract.tutorial.constructors.f2">
             <para>
               <emphasis role="bold">Rationale:</emphasis> The <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.constructor_precondition">boost::contract::constructor_precondition</link></computeroutput>
-              takes the derived class as its template parameter so the instantiated
-              template type is unique for each derived class. This always avoids
-              base class ambiguity resolution errors even when multiple inheritance
-              is used. Note that virtual inheritance could not be used instead of
-              the template parameter here to resolve ambiguities (because virtual
+              takes the derived class as its template parameter (using the Curiously
+              Recursive Template Pattern, CRTP) so the instantiated template type
+              is unique for each derived class. This always avoids base class ambiguity
+              resolution errors even when multiple inheritance is used. Note that,
+              as already mentioned, virtual inheritance could not be used instead
+              of the template parameter here to resolve ambiguities (because virtual
               bases are initialized only once by the outer-most derived class, and
               that would not allow to properly check preconditions of all base classes).
             </para>
         </para>
         </footnote> It is also possible to specify exceptions guarantees for constructors
         (see <link linkend="boost_contract.tutorial.exception_guarantees">Exception
-        Guarantees</link>), but programmers should not access the object <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">this</phrase></computeroutput> or its old value in constructor exception
-        guarantees (because the object did not exist before executing the constructor
-        body and it was not properly constructed given the constructor body threw
-        an exception). <footnote id="boost_contract.tutorial.constructors.f4">
+        Guarantees</link>), but programmers should not access the object <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">*</phrase><phrase role="keyword">this</phrase></computeroutput> or its
+        old value in constructor exception guarantees (because the object did not
+        exist before executing the constructor body and it was not properly constructed
+        given the constructor body threw an exception). <footnote id="boost_contract.tutorial.constructors.f4">
         <para>
           See <link linkend="boost_contract.extras.no_lambda_functions__no_c__11_">No
           Lambda Functions</link> to enforce these constraints at compile-time (but
         The <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.constructor">boost::contract::constructor</link></computeroutput>
         function returns an RAII object that must always be assigned to a local variable
         of type <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.check">boost::contract::check</link></computeroutput>
-        (otherwise this library will generate a run-time error, see <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870548928">BOOST_CONTRACT_ON_MISSING_CHECK_DECL</link></computeroutput>).
+        (otherwise this library will generate a run-time error, see <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999694064">BOOST_CONTRACT_ON_MISSING_CHECK_DECL</link></computeroutput>).
         Furthermore, C++11 <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">auto</phrase></computeroutput> declarations
         cannot be used here and the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.check">boost::contract::check</link></computeroutput>
         type must be explicitly specified (otherwise this library will generate a
         compile-time error prior C++17 and a run-time error post C++17). The constructor
-        body is programmed right after the declaration of the RAII object.
+        body is programmed right after the declaration of this RAII object.
       </para>
       <para>
         At construction, the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.check">boost::contract::check</link></computeroutput>
           by C++ (e.g., the move constructor).
         </para>
       </note>
+      <bridgehead renderas="sect4" id="boost_contract.tutorial.constructors.h0">
+        <phrase id="boost_contract.tutorial.constructors.private_and_protected_constructors"/><link linkend="boost_contract.tutorial.constructors.private_and_protected_constructors">Private
+        and Protected Constructors</link>
+      </bridgehead>
       <para>
         Private and protected constructors can omit <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.constructor">boost::contract::constructor</link></computeroutput>
         (because they are not part of the public interface of the class so they are
         for destructors (see <link linkend="boost_contract.tutorial.postconditions">Postconditions</link>,
         and also <link linkend="boost_contract.tutorial.static_public_functions">Static
         Public Functions</link> for an example), but programmers should not access
-        the object <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">this</phrase></computeroutput> in destructor
-        postconditions (because the object no longer exists after the destructor
-        body has been executed). <footnote id="boost_contract.tutorial.destructors.f0">
+        the object <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">*</phrase><phrase role="keyword">this</phrase></computeroutput>
+        in destructor postconditions (because the object no longer exists after the
+        destructor body has been executed). <footnote id="boost_contract.tutorial.destructors.f0">
         <para>
           See <link linkend="boost_contract.extras.no_lambda_functions__no_c__11_">No
           Lambda Functions</link> to enforce this constraint at compile-time (but
         </footnote> It is also possible to specify exceptions guarantees for destructors
         (see <link linkend="boost_contract.tutorial.exception_guarantees">Exception
         Guarantees</link>, even if destructors should usually be programmed to not
-        throw exceptions in C++ and in fact they are implicitly declared <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">noexcept</phrase></computeroutput> since C++11). <footnote id="boost_contract.tutorial.destructors.f1">
+        throw exceptions in C++, in fact destructors are implicitly declared <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">noexcept</phrase></computeroutput> since C++11). <footnote id="boost_contract.tutorial.destructors.f1">
         <para>
-          Exceptions guarantees in destructors can access both the object <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">this</phrase></computeroutput> and its old value because the object
-          exited before executing the destructor body and it still exists given the
-          destructor body failed throwing an exception so the object should still
-          be properly constructed and satisfy its class invariants.
+          Exceptions guarantees in destructors can access both the object <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">*</phrase><phrase role="keyword">this</phrase></computeroutput> and
+          its old value because the object existed before executing the destructor
+          body and it still exists given the destructor body failed throwing an exception
+          so technically the object should still be properly constructed and satisfy
+          its class invariants.
         </para>
         </footnote> The <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.destructor">boost::contract::destructor</link></computeroutput>
         function takes <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">this</phrase></computeroutput> as a parameter
         The <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.destructor">boost::contract::destructor</link></computeroutput>
         function returns an RAII object that must always be assigned to a local variable
         of type <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.check">boost::contract::check</link></computeroutput>
-        (otherwise this library will generate a run-time error, see <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870548928">BOOST_CONTRACT_ON_MISSING_CHECK_DECL</link></computeroutput>).
+        (otherwise this library will generate a run-time error, see <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999694064">BOOST_CONTRACT_ON_MISSING_CHECK_DECL</link></computeroutput>).
         Furthermore, C++11 <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">auto</phrase></computeroutput> declarations
         cannot be used here and the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.check">boost::contract::check</link></computeroutput>
         type must be explicitly specified (otherwise this library will generate a
         compile-time error prior C++17 and a run-time error post C++17). The destructor
-        body is programmed right after the declaration of the RAII object.
+        body is programmed right after the declaration of this RAII object.
       </para>
       <para>
         At construction, the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.check">boost::contract::check</link></computeroutput>
           manually define it using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.destructor">boost::contract::destructor</link></computeroutput>.
         </para>
       </note>
+      <bridgehead renderas="sect4" id="boost_contract.tutorial.destructors.h0">
+        <phrase id="boost_contract.tutorial.destructors.private_and_protected_destructors"/><link linkend="boost_contract.tutorial.destructors.private_and_protected_destructors">Private
+        and Protected Destructors</link>
+      </bridgehead>
       <para>
         Private and protected destructors can omit <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.destructor">boost::contract::destructor</link></computeroutput>
         (because they are not part of the public interface of the class so they are
     <section id="boost_contract.tutorial.public_functions">
       <title><link linkend="boost_contract.tutorial.public_functions">Public Functions</link></title>
       <para>
-        Contracts for public functions are programmed using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>.
+        Contracts for public functions are programmed using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>.
         In this section, let's consider public functions that are not static, not
         virtual, and do not override any function from base classes. For example
         (see <ulink url="../../example/features/public.cpp"><literal moreinfo="none">public.cpp</literal></ulink>):
     <phrase role="keyword">bool</phrase> <phrase role="identifier">find</phrase><phrase role="special">(</phrase><phrase role="keyword">int</phrase> <phrase role="identifier">id</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase> <phrase role="special">{</phrase>
         <phrase role="keyword">bool</phrase> <phrase role="identifier">result</phrase><phrase role="special">;</phrase>
         <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">check</phrase> <phrase role="identifier">c</phrase> <phrase role="special">=</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">public_function</phrase><phrase role="special">(</phrase><phrase role="keyword">this</phrase><phrase role="special">)</phrase>
+            <phrase role="special">.</phrase><phrase role="identifier">precondition</phrase><phrase role="special">([&amp;]</phrase> <phrase role="special">{</phrase>
+                <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">id</phrase> <phrase role="special">&gt;=</phrase> <phrase role="number">0</phrase><phrase role="special">);</phrase>
+            <phrase role="special">})</phrase>
             <phrase role="special">.</phrase><phrase role="identifier">postcondition</phrase><phrase role="special">([&amp;]</phrase> <phrase role="special">{</phrase>
                 <phrase role="keyword">if</phrase><phrase role="special">(</phrase><phrase role="identifier">size</phrase><phrase role="special">()</phrase> <phrase role="special">==</phrase> <phrase role="number">0</phrase><phrase role="special">)</phrase> <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(!</phrase><phrase role="identifier">result</phrase><phrase role="special">);</phrase>
             <phrase role="special">})</phrase>
         for public functions (see <link linkend="boost_contract.tutorial.preconditions">Preconditions</link>,
         <link linkend="boost_contract.tutorial.postconditions">Postconditions</link>,
         and <link linkend="boost_contract.tutorial.exception_guarantees">Exception
-        Guarantees</link>). When called from non-static public functions, the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
+        Guarantees</link>). When called from non-static public functions, the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
         function takes <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">this</phrase></computeroutput> as a parameter
         (because public functions check class invariants, see <link linkend="boost_contract.tutorial.class_invariants">Class
         Invariants</link>).
       </para>
       <para>
-        The <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
+        The <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
         function returns an RAII object that must always be assigned to a local variable
         of type <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.check">boost::contract::check</link></computeroutput>
-        (otherwise this library will generate a run-time error, see <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870548928">BOOST_CONTRACT_ON_MISSING_CHECK_DECL</link></computeroutput>).
+        (otherwise this library will generate a run-time error, see <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999694064">BOOST_CONTRACT_ON_MISSING_CHECK_DECL</link></computeroutput>).
         Furthermore, C++11 <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">auto</phrase></computeroutput> declarations
         cannot be used here and the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.check">boost::contract::check</link></computeroutput>
         type must be explicitly specified (otherwise this library will generate a
         compile-time error prior C++17 and a run-time error post C++17). The public
-        function body is programmed right after the declaration of the RAII object.
+        function body is programmed right after the declaration of this RAII object.
       </para>
       <para>
         At construction, the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.check">boost::contract::check</link></computeroutput>
       </para>
       <note>
         <para>
-          A public function can avoid calling <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
+          A public function can avoid calling <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
           for efficiency but only when it has no preconditions, no postconditions,
           no exception guarantees, it is not virtual, it does not override any virtual
           function, and its class has no invariants.
           The default copy assignment operator automatically generated by C++ will
           not check contracts. Therefore, unless this operator is not public or it
           has no preconditions, no postconditions, no exception guarantees, and its
-          class has no invariants, programmers should manually define it using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>.
+          class has no invariants, programmers should manually define it using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>.
           Similar considerations apply to all other operators automatically generated
           by C++ (e.g., the move operator).
         </para>
       <title><link linkend="boost_contract.tutorial.virtual_public_functions">Virtual
       Public Functions</link></title>
       <para>
-        Contracts for public functions are programmed using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>.
+        Contracts for public functions are programmed using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>.
         In this section, let's consider public functions that are virtual but that
         do not override any function from base classes. For example (see <ulink url="../../example/features/public.cpp"><literal moreinfo="none">public.cpp</literal></ulink>):
       </para>
         <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">check</phrase> <phrase role="identifier">c</phrase> <phrase role="special">=</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">public_function</phrase><phrase role="special">(</phrase>
                 <phrase role="identifier">v</phrase><phrase role="special">,</phrase> <phrase role="identifier">result</phrase><phrase role="special">,</phrase> <phrase role="keyword">this</phrase><phrase role="special">)</phrase> <phrase role="comment">// Pass `v` and `result`.</phrase>
             <phrase role="special">.</phrase><phrase role="identifier">precondition</phrase><phrase role="special">([&amp;]</phrase> <phrase role="special">{</phrase>
+                <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">id</phrase> <phrase role="special">&gt;=</phrase> <phrase role="number">0</phrase><phrase role="special">);</phrase>
                 <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(!</phrase><phrase role="identifier">find</phrase><phrase role="special">(</phrase><phrase role="identifier">id</phrase><phrase role="special">));</phrase> <phrase role="comment">// ID cannot be already present.</phrase>
             <phrase role="special">})</phrase>
             <phrase role="special">.</phrase><phrase role="identifier">postcondition</phrase><phrase role="special">([&amp;]</phrase> <phrase role="special">(</phrase><phrase role="keyword">int</phrase> <phrase role="keyword">const</phrase> <phrase role="identifier">result</phrase><phrase role="special">)</phrase> <phrase role="special">{</phrase>
         a part from when manipulating the virtual function type directly for function
         pointer type-casting, etc.). Programmers must pass the extra virtual parameter
         as the very first argument to all <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OLDOF">BOOST_CONTRACT_OLDOF</link></computeroutput>
-        and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
+        and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
         calls in the virtual public function definition. <footnote id="boost_contract.tutorial.virtual_public_functions.f1">
         <para>
           <emphasis role="bold">Rationale:</emphasis> The <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.virtual_">boost::contract::virtual_</link></computeroutput><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">*</phrase></computeroutput> parameter is used by this library to determine
           that a function is virtual (in C++ it is not possible to introspect if
           a function is declared <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">virtual</phrase></computeroutput>).
-          Furthermore, this parameter is internally used by this library to pass
-          result and old values that are evaluated by the overriding function to
-          overridden virtual functions in base classes, and also to check preconditions,
-          postconditions, and exception guarantees of overridden virtual functions
-          to implement subcontracting.
+          Furthermore, this parameter is internally used by this library to implement
+          subcontracting (specifically to pass result and old values that are evaluated
+          by the overriding function to the contracts of overridden virtual functions
+          in base classes, and also to check preconditions, postconditions, and exception
+          guarantees of overridden virtual functions in <link linkend="or_anchor"><literal moreinfo="none"><emphasis>OR</emphasis></literal></link>
+          and <link linkend="and_anchor"><literal moreinfo="none"><emphasis>AND</emphasis></literal></link>
+          with contracts of the overriding virtual function).
         </para>
         </footnote>
       </para>
       <para>
-        When called from virtual public functions, the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
+        When called from virtual public functions, the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
         function takes <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">this</phrase></computeroutput> as a parameter
         (because public functions check class invariants, see <link linkend="boost_contract.tutorial.class_invariants">Class
         Invariants</link>). For virtual public functions returning <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">void</phrase></computeroutput>:
       <para>
         For virtual public functions not returning <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">void</phrase></computeroutput>,
         programmers must also pass a reference to the function return value as the
-        second argument to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>.
+        second argument to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>.
         In this case, the library will pass this return value reference to the postcondition
         functor that must therefore take one single argument matching the return
         type, otherwise this library will generate a compile-time error (the functor
           <emphasis role="bold">Rationale:</emphasis> The extra function result parameter
           taken by the functor passed to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">.</phrase><phrase role="identifier">postcondition</phrase><phrase role="special">(...)</phrase></computeroutput>
           is used by this library to pass the return value evaluated by the overriding
-          function to all its overridden virtual functions when subcontracting.
+          function to all its overridden virtual functions to support subcontracting.
         </para>
         </footnote>
       </para>
         <para>
           It is the responsibility of the programmers to pass the extra virtual parameter
           <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">v</phrase></computeroutput> to all <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OLDOF">BOOST_CONTRACT_OLDOF</link></computeroutput>
-          and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
+          and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
           calls within virtual public functions, and also to pass the return value
-          reference after <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">v</phrase></computeroutput> to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
+          reference after <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">v</phrase></computeroutput> to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
           for non-void virtual public functions. This library cannot automatically
           generate compile-time errors if programmers fail to do so (but in general
           this will prevent the library from correctly checking contracts at run-time).
           <footnote id="boost_contract.tutorial.virtual_public_functions.f3">
           <para>
             <emphasis role="bold">Rationale:</emphasis> This library does not require
-            programmers to specify the function type when using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
+            programmers to specify the function type when using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
             for non-overriding virtual public functions. Therefore, this library
             does not know if the enclosing function has a non-void return type so
             it cannot check if the return value reference is passed as required for
         <blockquote>
           <para>
             When <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">v</phrase></computeroutput> is present, always
-            pass it as the first argument to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
+            pass it as the first argument to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
             and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OLDOF">BOOST_CONTRACT_OLDOF</link></computeroutput>.
           </para>
         </blockquote>
         <blockquote>
           <para>
             Always pass <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">result</phrase></computeroutput> to
-            <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
+            <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
             right after <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">v</phrase></computeroutput> for non-void
             functions.
           </para>
       </para>
       <note>
         <para>
-          A virtual public function should always call <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
+          A virtual public function should always call <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
           (even if it has no preconditions, no postconditions, no exception guarantees,
           and its class has no invariants), otherwise this library will not be able
           to correctly use it for subcontracting.
       <title><link linkend="boost_contract.tutorial.public_function_overrides__subcontracting_">Public
       Function Overrides (Subcontracting)</link></title>
       <para>
-        Contracts for public functions are programmed using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>.
+        Contracts for public functions are programmed using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>.
         In this section, let's consider public functions (virtual or not) that override
-        virtual public functions from one or more public base classes. For example
-        (see <ulink url="../../example/features/public.cpp"><literal moreinfo="none">public.cpp</literal></ulink>):
+        virtual public functions from one or more of their public base classes. For
+        example (see <ulink url="../../example/features/public.cpp"><literal moreinfo="none">public.cpp</literal></ulink>):
         <footnote id="boost_contract.tutorial.public_function_overrides__subcontracting_.f0">
         <para>
           In this documentation, function overrides are often marked with the code
         <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">old_ptr</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">int</phrase><phrase role="special">&gt;</phrase> <phrase role="identifier">old_size</phrase> <phrase role="special">=</phrase>
                 <phrase role="identifier">BOOST_CONTRACT_OLDOF</phrase><phrase role="special">(</phrase><phrase role="identifier">v</phrase><phrase role="special">,</phrase> <phrase role="identifier">size</phrase><phrase role="special">());</phrase>
         <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">check</phrase> <phrase role="identifier">c</phrase> <phrase role="special">=</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">public_function</phrase><phrase role="special">&lt;</phrase>
-            <phrase role="identifier">override_push_back</phrase> <phrase role="comment">// Pass override plus below function pointer...</phrase>
+            <phrase role="identifier">override_push_back</phrase> <phrase role="comment">// Pass override type plus below function pointer...</phrase>
         <phrase role="special">&gt;(</phrase><phrase role="identifier">v</phrase><phrase role="special">,</phrase> <phrase role="identifier">result</phrase><phrase role="special">,</phrase> <phrase role="special">&amp;</phrase><phrase role="identifier">identifiers</phrase><phrase role="special">::</phrase><phrase role="identifier">push_back</phrase><phrase role="special">,</phrase> <phrase role="keyword">this</phrase><phrase role="special">,</phrase> <phrase role="identifier">id</phrase><phrase role="special">)</phrase> <phrase role="comment">// ...and arguments.</phrase>
             <phrase role="special">.</phrase><phrase role="identifier">precondition</phrase><phrase role="special">([&amp;]</phrase> <phrase role="special">{</phrase> <phrase role="comment">// Check in OR with bases.</phrase>
+                <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">id</phrase> <phrase role="special">&gt;=</phrase> <phrase role="number">0</phrase><phrase role="special">);</phrase>
                 <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">find</phrase><phrase role="special">(</phrase><phrase role="identifier">id</phrase><phrase role="special">));</phrase> <phrase role="comment">// ID can be already present.</phrase>
             <phrase role="special">})</phrase>
             <phrase role="special">.</phrase><phrase role="identifier">postcondition</phrase><phrase role="special">([&amp;]</phrase> <phrase role="special">(</phrase><phrase role="keyword">int</phrase> <phrase role="keyword">const</phrase> <phrase role="identifier">result</phrase><phrase role="special">)</phrase> <phrase role="special">{</phrase> <phrase role="comment">// Check in AND with bases.</phrase>
         The extra <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">typedef</phrase></computeroutput> declared using
         <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_BASE_TYPES">BOOST_CONTRACT_BASE_TYPES</link></computeroutput>
         is required by this library for derived classes and it is internally used
-        detect base classes for subcontracting (see <link linkend="boost_contract.tutorial.base_classes__subcontracting_">Base
-        Classes</link>).
+        to detect base classes for subcontracting (see <link linkend="boost_contract.tutorial.base_classes__subcontracting_">Base
+        Classes</link>). This library will generate a compile-time error if there
+        is no suitable virtual function to override in any of the public base classes
+        for subcontracting. <footnote id="boost_contract.tutorial.public_function_overrides__subcontracting_.f1">
+        <para>
+          The compile-time error generated by the library in this case is similar
+          in principle to the error generated by the C++11 <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">override</phrase></computeroutput>
+          specifier, but it is limited to functions with the extra <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.virtual_">boost::contract::virtual_</link></computeroutput><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">*</phrase></computeroutput> parameter and searched recursively only
+          in <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">public</phrase></computeroutput> base classes passed
+          to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_BASE_TYPES">BOOST_CONTRACT_BASE_TYPES</link></computeroutput>
+          because only those are considered for subcontracting.
+        </para>
+        </footnote>
       </para>
       <para>
-        When called from public function overrides, the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
+        When called from public function overrides, the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
         function template takes an explicit template argument <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">override_</phrase></computeroutput><literal moreinfo="none"><emphasis>function-name</emphasis></literal>
         that must be defined using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OVERRIDE">BOOST_CONTRACT_OVERRIDE</link></computeroutput>:
       </para>
-<programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_CONTRACT_OVERRIDE</phrase><phrase role="special">(</phrase><phrase role="identifier">func_name</phrase><phrase role="special">)</phrase>
+<programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_CONTRACT_OVERRIDE</phrase><phrase role="special">(</phrase><literal moreinfo="none"><emphasis>function-name</emphasis></literal><phrase role="special">)</phrase>
 </programlisting>
       <para>
         This can be declared at any point in the public section of the enclosing
         class (see <link linkend="boost_contract.advanced.access_specifiers">Access
         Specifiers</link> to use <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OVERRIDE">BOOST_CONTRACT_OVERRIDE</link></computeroutput>
-        in a non-public section of the class instead). <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OVERRIDE">BOOST_CONTRACT_OVERRIDE</link></computeroutput>
+        also in a non-public section of the class). <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OVERRIDE">BOOST_CONTRACT_OVERRIDE</link></computeroutput>
         is used only once in a class for a given function name and overloaded functions
         can reuse the same <literal moreinfo="none">override_<emphasis>function-name</emphasis></literal>
         definition (see <link linkend="boost_contract.advanced.function_overloads">Function
-        Overloads</link>). <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123869781472">BOOST_CONTRACT_NAMED_OVERRIDE</link></computeroutput>
+        Overloads</link>). <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394998912688">BOOST_CONTRACT_NAMED_OVERRIDE</link></computeroutput>
         can be used to generate a name different than <literal moreinfo="none">override_<emphasis>function-name</emphasis></literal>
         (e.g., to avoid generating C++ reserved names containing double underscores
         "<computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">__</phrase></computeroutput>" for function
 <programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_CONTRACT_OVERRIDES</phrase><phrase role="special">(</phrase><phrase role="identifier">f</phrase><phrase role="special">,</phrase> <phrase role="identifier">g</phrase><phrase role="special">,</phrase> <phrase role="identifier">h</phrase><phrase role="special">)</phrase>
 </programlisting>
       <para>
-        Is equivalent to: <footnote id="boost_contract.tutorial.public_function_overrides__subcontracting_.f1">
+        Is equivalent to: <footnote id="boost_contract.tutorial.public_function_overrides__subcontracting_.f2">
         <para>
-          This library does not provider an equivalent of <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123869781472">BOOST_CONTRACT_NAMED_OVERRIDE</link></computeroutput>
-          that operates on multiple function names at once (simply because programmers
-          will probably not use <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123869781472">BOOST_CONTRACT_NAMED_OVERRIDE</link></computeroutput>
-          often in the first place).
+          There is no equivalent of <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394998912688">BOOST_CONTRACT_NAMED_OVERRIDE</link></computeroutput>
+          that operates on multiple function names at once (<computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394998912688">BOOST_CONTRACT_NAMED_OVERRIDE</link></computeroutput>
+          is not expected to be used often so it can simply be repeated multiple
+          times when needed).
         </para>
         </footnote>
       </para>
 <phrase role="identifier">BOOST_CONTRACT_OVERRIDE</phrase><phrase role="special">(</phrase><phrase role="identifier">h</phrase><phrase role="special">)</phrase>
 </programlisting>
       <para>
-        This library will generate a compile-time error if there is no suitable virtual
-        function to override in any of the public base classes for subcontracting.
-        <footnote id="boost_contract.tutorial.public_function_overrides__subcontracting_.f2">
-        <para>
-          The compile-time error generated by the library in this case is similar
-          in principle to the error generated by the C++11 <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">override</phrase></computeroutput>
-          specifier, but it is limited to functions with the extra <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.virtual_">boost::contract::virtual_</link></computeroutput><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">*</phrase></computeroutput> parameter and searched recursively only
-          in <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">public</phrase></computeroutput> base classes passed
-          to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_BASE_TYPES">BOOST_CONTRACT_BASE_TYPES</link></computeroutput>
-          because only those are considered for subcontracting.
-        </para>
-        </footnote>
-      </para>
-      <para>
         Public function overrides must always list the extra trailing parameter of
         type <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.virtual_">boost::contract::virtual_</link></computeroutput><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">*</phrase></computeroutput> with default value <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="number">0</phrase></computeroutput>
         (i.e., <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">nullptr</phrase></computeroutput>), even when they
-        are not declared <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">virtual</phrase></computeroutput> (because
+        are not declared <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">virtual</phrase></computeroutput>, if
         this parameter is present in the signature of the virtual function being
-        overridden from base classes). Programmers must pass the extra virtual parameter
+        overridden from base classes. Programmers must pass the extra virtual parameter
         as the very first argument to all <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OLDOF">BOOST_CONTRACT_OLDOF</link></computeroutput>
-        and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
+        and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
         calls in the public function override definition (see <link linkend="boost_contract.tutorial.virtual_public_functions">Virtual
         Public Functions</link>).
       </para>
       <para>
-        When called from public function overrides, the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
-        function takes a pointer to the enclosing function, the object <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">this</phrase></computeroutput> (because public function overrides check
-        class invariants, see <link linkend="boost_contract.tutorial.class_invariants">Class
+        When called from public function overrides, the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
+        function takes a pointer to the enclosing function, the object <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">*</phrase><phrase role="keyword">this</phrase></computeroutput> (because
+        public function overrides check class invariants, see <link linkend="boost_contract.tutorial.class_invariants">Class
         Invariants</link>), and references to each function argument in the order
         they appear in the function declaration. <footnote id="boost_contract.tutorial.public_function_overrides__subcontracting_.f3">
         <para>
           <emphasis role="bold">Rationale:</emphasis> The object <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">this</phrase></computeroutput>
           is passed after the function pointer to follow <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">bind</phrase></computeroutput>'s
           syntax. The function pointer and references to all function arguments are
-          needed for public function overrides because this library has to call overridden
-          virtual public functions to check their contracts for subcontracting (even
-          if this library will not actually execute the bodies of the overridden
+          needed for public function overrides because this library has to internally
+          call overridden virtual public functions to check their contracts for subcontracting
+          (even if this library will not actually execute the bodies of the overridden
           functions).
         </para>
         </footnote> For public function overrides returning <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">void</phrase></computeroutput>:
 
         <phrase role="special">...</phrase>
     <phrase role="special">}</phrase>
-
     <phrase role="identifier">BOOST_CONTRACT_OVERRIDE</phrase><phrase role="special">(</phrase><phrase role="identifier">f</phrase><phrase role="special">)</phrase>
 
     <phrase role="special">...</phrase>
       <para>
         For public function overrides not returning <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">void</phrase></computeroutput>,
         programmers must also pass a reference to the function return value as the
-        second argument to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
+        second argument to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
         (this library will generate a compile-time error otherwise). <footnote id="boost_contract.tutorial.public_function_overrides__subcontracting_.f4">
         <para>
           <emphasis role="bold">Rationale:</emphasis> As for non-overriding virtual
         to the postcondition functor that must therefore take one single argument
         matching the return type, otherwise this library will generate a compile-time
         error (the functor parameter can be a constant reference <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">const</phrase><phrase role="special">&amp;</phrase></computeroutput> to avoid extra copies of the return
-        value):
+        value, similarly to non-overriding non-void <link linkend="boost_contract.tutorial.virtual_public_functions">Virtual
+        Public Functions</link>):
       </para>
 <programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase> <phrase role="special">{</phrase>
 <phrase role="keyword">public</phrase><phrase role="special">:</phrase>
 
         <phrase role="special">...</phrase>                                                 <phrase role="comment">// Assign `result` at each return.</phrase>
     <phrase role="special">}</phrase>
-
     <phrase role="identifier">BOOST_CONTRACT_OVERRIDE</phrase><phrase role="special">(</phrase><phrase role="identifier">f</phrase><phrase role="special">)</phrase>
 
     <phrase role="special">...</phrase>
         functions being overridden in the base classes. <footnote id="boost_contract.tutorial.public_function_overrides__subcontracting_.f5">
         <para>
           <emphasis role="bold">Rationale:</emphasis> The <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">bad_any_cast</phrase></computeroutput>
-          exception could not used here because it does not print the from- and to-
+          exception was not used here because it does not print the from- and to-
           type names (so it is not descriptive enough).
         </para>
         </footnote>
         <para>
           It is the responsibility of the programmers to pass the extra virtual parameter
           <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">v</phrase></computeroutput> to all <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OLDOF">BOOST_CONTRACT_OLDOF</link></computeroutput>
-          and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
+          and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
           calls within public function overrides, and also to pass the return value
-          reference after <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">v</phrase></computeroutput> to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
+          reference after <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">v</phrase></computeroutput> to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
           for non-void public function overrides. This library cannot always generate
           compile-time errors if programmers fail to do so (but in general this will
           prevent the library from correctly checking contracts at run-time).
         <blockquote>
           <para>
             When <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">override_</phrase><phrase role="special">...</phrase></computeroutput>
-            is present, always pass it as template parameter to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude">boost::contract::public_functioon</computeroutput>.
+            is present, always pass it as template parameter to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>.
           </para>
         </blockquote>
         <blockquote>
           <para>
             When <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">v</phrase></computeroutput> is present, always
-            pass it as the first argument to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
+            pass it as the first argument to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
             and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OLDOF">BOOST_CONTRACT_OLDOF</link></computeroutput>.
           </para>
         </blockquote>
         <blockquote>
           <para>
             Always pass <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">result</phrase></computeroutput> to
-            <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
+            <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
             right after <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">v</phrase></computeroutput> for non-void
             functions.
           </para>
         </listitem>
       </orderedlist>
       <para>
-        This ensures that public function override contracts and subcontracts are
-        correctly checked at run-time (see <link linkend="boost_contract.contract_programming_overview.public_function_calls">Public
+        This ensures that contracts and subcontracts of public function overrides
+        are correctly checked at run-time in accordance with the <ulink url="http://en.wikipedia.org/wiki/Liskov_substitution_principle">substitution
+        principle</ulink> (see <link linkend="boost_contract.contract_programming_overview.public_function_calls">Public
         Function Calls</link>).
       </para>
       <para>
       </para>
       <note>
         <para>
-          A public function override should always call <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
+          A public function override should always call <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
           (even if it has no preconditions, no postconditions, no exception guarantees,
           and its class has no invariants), otherwise this library will not be able
           to correctly use it for subcontracting.
 </programlisting>
       </para>
       <para>
-        For convenience, a local macro named <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BASES</phrase></computeroutput>
+        For convenience, a <emphasis>local macro</emphasis> named <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BASES</phrase></computeroutput>
         can be used to avoid repeating the base list twice (first in the derived
         class declaration <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">class</phrase> </computeroutput><literal moreinfo="none"><emphasis>class-name</emphasis></literal><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude">
         <phrase role="special">:</phrase> </computeroutput><literal moreinfo="none"><emphasis>base-list</emphasis></literal>
         and then again when invoking <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_CONTRACT_BASE_TYPES</phrase><phrase role="special">(</phrase></computeroutput><literal moreinfo="none"><emphasis>base-list</emphasis></literal><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">)</phrase></computeroutput>). Being a local macro, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BASES</phrase></computeroutput>
         must be undefined using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="preprocessor">#undef</phrase>
-        <phrase role="identifier">BASES</phrase></computeroutput> after it has been used to
-        declare <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">base_types</phrase></computeroutput> (to avoid
-        name clashes and macro redefinition errors). <footnote id="boost_contract.tutorial.base_classes__subcontracting_.f0">
+        <phrase role="identifier">BASES</phrase></computeroutput> after it is used to declare
+        the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">base_types</phrase></computeroutput> <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">typedef</phrase></computeroutput> (to avoid name clashes and macro redefinition
+        errors). <footnote id="boost_contract.tutorial.base_classes__subcontracting_.f0">
         <para>
           The name of this local macro is arbitrary, but <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BASES</phrase></computeroutput>
           is often used in this documentation.
             <link linkend="boost_contract.contract_programming_overview.public_function_calls">Public
             Function Calls</link>). <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_BASE_TYPES">BOOST_CONTRACT_BASE_TYPES</link></computeroutput>
             inspects each inheritance access level using preprocessor meta-programming
-            and removes non-public bases from the list of bases inspected for subcontracting.
-            However, this library cannot always detect when programmers forget to
-            specify the inheritance access level because, when commas are used to
-            separate template parameters passed to base classes, the preprocessor
+            and removes non-public bases from the list of bases internally used for
+            subcontracting. However, this library cannot always detect when programmers
+            forget to specify the inheritance access level because, when commas are
+            used to separate template parameters passed to base classes, the preprocessor
             will not be able to correctly use commas to identify the next base class
             token in the inheritance list (the preprocessor cannot distinguish between
             commas that are not protected by round parenthesis, like the ones used
-            in templates). Therefore, this library relies on inheritance access levels
-            to program the preprocessor to correctly identify the next base class
-            token in the inheritance list (thus inheritance access levels must always
-            be explicit specified by programmers).
+            in templates). Therefore, this library uses the inheritance access level
+            keyword <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">public</phrase></computeroutput>, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">protected</phrase></computeroutput>, or <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">private</phrase></computeroutput>
+            instead of commas <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">,</phrase></computeroutput> for
+            the preprocessor to correctly find the next base class token in the inheritance
+            list (thus inheritance access levels must always be explicit specified
+            by programmers for each base).
           </para>
           </footnote> It is the responsibility of the programmers to make sure that
           all bases passed to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_BASE_TYPES">BOOST_CONTRACT_BASE_TYPES</link></computeroutput>
           as explained in <link linkend="boost_contract.advanced.access_specifiers">Access
           Specifiers</link>).
         </para>
-        </footnote> See <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870587168">BOOST_CONTRACT_BASES_TYPEDEF</link></computeroutput>
+        </footnote> See <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999732400">BOOST_CONTRACT_BASES_TYPEDEF</link></computeroutput>
         to use a name different from <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">base_types</phrase></computeroutput>
         (e.g., because <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">base_types</phrase></computeroutput>
         clashes with other names in user-defined classes).
       <title><link linkend="boost_contract.tutorial.static_public_functions">Static
       Public Functions</link></title>
       <para>
-        Contracts for public functions are programmed using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>.
+        Contracts for public functions are programmed using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>.
         In this section, let's consider static public functions. For example (see
         <ulink url="../../example/features/static_public.cpp"><literal moreinfo="none">static_public.cpp</literal></ulink>):
       </para>
         for static public functions (see <link linkend="boost_contract.tutorial.preconditions">Preconditions</link>,
         <link linkend="boost_contract.tutorial.postconditions">Postconditions</link>,
         and <link linkend="boost_contract.tutorial.exception_guarantees">Exception
-        Guarantees</link>). When called from static public functions, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
+        Guarantees</link>). When called from static public functions, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
         cannot take the object <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">this</phrase></computeroutput>
         as a parameter (because there is no object <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">this</phrase></computeroutput>
-        in static member functions) so the enclosing class type is is specified as
-        an explicit template parameter (the class type is required to check static
-        class invariants, see <link linkend="boost_contract.tutorial.class_invariants">Class
+        in static member functions) so the enclosing class type is specified via
+        an explicit template parameter as in <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput><literal moreinfo="none">&lt;<emphasis>class-type</emphasis>&gt;</literal>
+        (the class type is required to check static class invariants, see <link linkend="boost_contract.tutorial.class_invariants">Class
         Invariants</link>):
       </para>
 <programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase> <phrase role="special">{</phrase>
 <phrase role="special">};</phrase>
 </programlisting>
       <para>
-        The <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
+        The <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
         function returns an RAII object that must be assigned to a local variable
         of type <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.check">boost::contract::check</link></computeroutput>
-        (otherwise this library will generate a run-time error, see <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870548928">BOOST_CONTRACT_ON_MISSING_CHECK_DECL</link></computeroutput>).
+        (otherwise this library will generate a run-time error, see <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999694064">BOOST_CONTRACT_ON_MISSING_CHECK_DECL</link></computeroutput>).
         Furthermore, C++11 <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">auto</phrase></computeroutput> declarations
         cannot be used here and the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.check">boost::contract::check</link></computeroutput>
         type must be explicitly specified (otherwise this library will generate a
         compile-time error prior C++17 and a run-time error post C++17). The static
-        public functions body is programmed right after the declaration of the RAII
+        public functions body is programmed right after the declaration of this RAII
         object.
       </para>
       <para>
       </para>
       <note>
         <para>
-          A static public function can avoid calling <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
+          A static public function can avoid calling <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
           for efficiency but only when it has no preconditions, no postconditions,
           no exception guarantees, and its class has no static invariants (the class
           can still have non-static invariants or base classes instead).
   <section id="boost_contract.advanced">
     <title><link linkend="boost_contract.advanced">Advanced</link></title>
     <para>
-      This section is a guide to advanced usages of this library.
+      This section is a guide to advanced usage of this library.
     </para>
     <section id="boost_contract.advanced.pure_virtual_public_functions">
       <title><link linkend="boost_contract.advanced.pure_virtual_public_functions">Pure
         so defined outside the class declaring the pure virtual function <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">virtual</phrase> <phrase role="special">...</phrase> <phrase role="special">=</phrase> <phrase role="number">0</phrase><phrase role="special">;</phrase></computeroutput>.
       </para>
       <para>
-        Contracts for pure virtual public functions are programmed using the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
+        Contracts for pure virtual public functions are programmed using the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
         function like for (non-pure) virtual public functions (all consideration
         made in <link linkend="boost_contract.tutorial.virtual_public_functions">Virtual
         Public Functions</link> apply). However, contracts have to be programmed
         preconditions specified by all its overriding functions in derived classes
         will have no effect (because when checked in <link linkend="or_anchor"><literal moreinfo="none"><emphasis>OR</emphasis></literal></link>
         with the overridden function from the base class that has no preconditions,
-        they will always pass): <footnote id="boost_contract.advanced.pure_virtual_public_functions.f0">
-        <para>
-          This consequence of the <ulink url="http://en.wikipedia.org/wiki/Liskov_substitution_principle">substitution
-          principle</ulink> <quote>that if any function in an inheritance hierarchy
-          has no preconditions, then preconditions on functions overriding it have
-          no useful effect</quote> is also explicitly mentioned in the contract documentation
-          of the D Programming Language (see <link linkend="Bright04_anchor">[Bright04]</link>).
-        </para>
-        </footnote>
+        they will always pass):
       </para>
 <programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase> <phrase role="special">{</phrase> <phrase role="comment">// Some base class.</phrase>
 <phrase role="keyword">public</phrase><phrase role="special">:</phrase>
         class can be called from any context (because it has no precondition) and
         so must all its overriding functions in all derived classes in accordance
         to the <ulink url="http://en.wikipedia.org/wiki/Liskov_substitution_principle">substitution
-        principle</ulink>. In other words, the code above has the effect as declaring
+        principle</ulink>. <footnote id="boost_contract.advanced.pure_virtual_public_functions.f0">
+        <para>
+          This consequence of the <ulink url="http://en.wikipedia.org/wiki/Liskov_substitution_principle">substitution
+          principle</ulink> <quote>that if any function in an inheritance hierarchy
+          has no preconditions, then preconditions on functions overriding it have
+          no useful effect</quote> is also explicitly mentioned in the contract documentation
+          of the D Programming Language (see <link linkend="Bright04_anchor">[Bright04]</link>).
+        </para>
+        </footnote> In other words, the code above has the same effect as declaring
         the virtual public function in the base class with a single precondition
         <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="keyword">true</phrase><phrase role="special">)</phrase></computeroutput> that
         will always trivially pass:
       </para>
       <para>
         That said, the need to declare such a precondition <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="keyword">false</phrase><phrase role="special">)</phrase></computeroutput>
-        that will always fail might be an indication that the base class interface
+        that will always fail might also be an indication that the base class interface
         is not correctly designed. In general, the base class interface should still
         contain all functions (eventually as pure virtual) that are necessary to
         program its contracts.
         value at run-time). <footnote id="boost_contract.advanced.optional_return_values.f0">
         <para>
           <emphasis role="bold">Rationale:</emphasis> This library uses <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">optional</phrase></computeroutput> instead of <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">optional</phrase></computeroutput>
-          because <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">optional</phrase></computeroutput> is not available before C++17.
+          to support a larger number of compilers and their versions (because <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">optional</phrase></computeroutput> was not available before C++17).
         </para>
         </footnote> For example (see <ulink url="../../example/features/optional_result.cpp"><literal moreinfo="none">optional_result.cpp</literal></ulink>):
       </para>
         by the precondition before it can be used to retrieve the reference to assign
         to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">result</phrase></computeroutput> so <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">vect</phrase><phrase role="special">[</phrase><phrase role="identifier">Index</phrase><phrase role="special">]</phrase></computeroutput> cannot be used to initialize <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">result</phrase></computeroutput> when it is declared before the contract
         declaration. Therefore, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">optional</phrase></computeroutput>
-        is used to defer <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">result</phrase></computeroutput> proper
+        is used to defer <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">result</phrase></computeroutput> real
         initialization until the execution of the function body, after the contract
         declaration, where <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">Index</phrase></computeroutput>
         has been validated by the precondition and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">vect</phrase><phrase role="special">[</phrase><phrase role="identifier">Index</phrase><phrase role="special">]</phrase></computeroutput> can be safely evaluated to initialize <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">result</phrase></computeroutput>.
         to access the return value (using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">operator</phrase><phrase role="special">*</phrase></computeroutput> and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">operator</phrase><phrase role="special">-&gt;</phrase></computeroutput> as usual with <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">optional</phrase></computeroutput>,
         and without having to explicitly check if <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">result</phrase></computeroutput>
         is an empty <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">optional</phrase></computeroutput> object or not). This can be done
-        ensuring that <emphasis>all</emphasis> return statements in the function
-        are of the form:
+        ensuring that <emphasis>all</emphasis> <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">return</phrase></computeroutput>
+        statements in the function are of the form:
       </para>
-<programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">optional</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">return_type</phrase><phrase role="special">&gt;</phrase> <phrase role="identifier">result</phrase><phrase role="special">;</phrase>
+<programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">optional</phrase><phrase role="special">&lt;</phrase><literal moreinfo="none"><emphasis>return-type</emphasis></literal><phrase role="special">&gt;</phrase> <phrase role="identifier">result</phrase><phrase role="special">;</phrase>
 <phrase role="special">...</phrase>
-<phrase role="keyword">return</phrase> <phrase role="special">*(</phrase><phrase role="identifier">result</phrase> <phrase role="special">=</phrase> <phrase role="identifier">return_expr</phrase><phrase role="special">);</phrase> <phrase role="comment">// Assign `result` at each return.</phrase>
+<phrase role="keyword">return</phrase> <phrase role="special">*(</phrase><phrase role="identifier">result</phrase> <phrase role="special">=</phrase> <literal moreinfo="none"><emphasis>return-expression</emphasis></literal><phrase role="special">);</phrase> <phrase role="comment">// Assign `result` at each return.</phrase>
 </programlisting>
       <bridgehead renderas="sect4" id="boost_contract.advanced.optional_return_values.h0">
         <phrase id="boost_contract.advanced.optional_return_values.optional_results_in_virtual_public_functions"/><link linkend="boost_contract.advanced.optional_return_values.optional_results_in_virtual_public_functions">Optional
         Virtual Public Functions</link>, <link linkend="boost_contract.tutorial.virtual_public_functions">Virtual
         Public Functions</link>, and <link linkend="boost_contract.tutorial.public_function_overrides__subcontracting_">Public
         Function Overrides</link>, in these cases the return value <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">result</phrase></computeroutput> must be passed as a parameter to
-        <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
+        <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
         right after the parameter <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">v</phrase></computeroutput>
         of type <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.virtual_">boost::contract::virtual_</link></computeroutput><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">*</phrase></computeroutput>. Then the functor passed to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">.</phrase><phrase role="identifier">postcondition</phrase><phrase role="special">(...)</phrase></computeroutput> takes one single parameter of type
         <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">optional</phrase><phrase role="special">&lt;</phrase></computeroutput><literal moreinfo="none"><emphasis>return-type</emphasis></literal><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude">
         principle</ulink> applies, see <link linkend="boost_contract.contract_programming_overview.function_calls">Function
         Calls</link>). However, programmers may still want to specify preconditions
         and postconditions for private and protected functions when they want to
-        check correctness of their implementation and usage from within the class,
-        base classes, and friend classes or functions. When programmers decide to
-        specify contracts for private and protected functions, they shall use <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.function">boost::contract::function</link></computeroutput>
+        check correctness of their implementation and use (from within the class,
+        base classes, friend classes or functions, etc.). When programmers decide
+        to specify contracts for private and protected functions, they can use <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.function">boost::contract::function</link></computeroutput>
         (because, like for non-member functions, this does not check class invariants
         and does not subcontract). For example (see <ulink url="../../example/features/private_protected.cpp"><literal moreinfo="none">private_protected.cpp</literal></ulink>):
       </para>
       <para>
         However, public functions in derived classes overriding private or protected
         virtual functions from base classes shall not specify the extra <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">override_</phrase><phrase role="special">...</phrase></computeroutput>
-        template parameter to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
+        template parameter to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
         because the overridden functions are private or protected and, not being
         public, they do not participate to subcontracting (this library will generate
         a compile-time error if <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">override_</phrase><phrase role="special">...</phrase></computeroutput> is specified because there will be no
-        virtual public function to override from the base class). For example (see
-        <ulink url="../../example/features/private_protected_virtual.cpp"><literal moreinfo="none">private_protected_virtual.cpp</literal></ulink>):
+        virtual <emphasis>public</emphasis> function to override from the base class).
+        For example (see <ulink url="../../example/features/private_protected_virtual.cpp"><literal moreinfo="none">private_protected_virtual.cpp</literal></ulink>):
       </para>
       <para>
 <programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">class</phrase> <phrase role="identifier">counter10</phrase>
         that are private or protected from one base but public from another base.
         In this case, public function overrides in derived classes will specify the
         extra <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">override_</phrase><phrase role="special">...</phrase></computeroutput>
-        template parameter to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
+        template parameter to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
         (because the overridden functions are private or protected in one base and
         those do not participate to subcontracting, but public in another base and
         these participate to subcontracting instead). For example (see <ulink url="../../example/features/private_protected_virtual_multi.cpp"><literal moreinfo="none">private_protected_virtual_multi.cpp</literal></ulink>):
           and Clang correctly implement SFINAE failures due to private and protected
           functions so the code above correctly complies on GCC and Clang. Therefore,
           currently it is not possible to override a function that is public in one
-          base but private or protected in other base using this library on MSVC,
-          but that can correctly be done on GCC or Clang instead.
+          base but private or protected in other base using this library on MSVC
+          (at least up to Visual Studio 2015), but that can correctly be done on
+          GCC or Clang instead.
         </para>
       </warning>
     </section>
     <section id="boost_contract.advanced.friend_functions">
       <title><link linkend="boost_contract.advanced.friend_functions">Friend Functions</link></title>
       <para>
-        Friend functions are not member functions so <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.function">boost::contract::function</link></computeroutput>
-        can used to program contracts for them and all considerations made in <link linkend="boost_contract.tutorial.non_member_functions">Non-Member Functions</link>
-        apply. For example (see <ulink url="../../example/features/friend.cpp"><literal moreinfo="none">friend.cpp</literal></ulink>):
+        In general, friend functions are not member functions so <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.function">boost::contract::function</link></computeroutput>
+        is used to program their contracts and all considerations made in <link linkend="boost_contract.tutorial.non_member_functions">Non-Member
+        Functions</link> apply. For example (see <ulink url="../../example/features/friend.cpp"><literal moreinfo="none">friend.cpp</literal></ulink>):
       </para>
       <para>
 <programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">class</phrase> <phrase role="identifier">buffer</phrase><phrase role="special">;</phrase>
         and it can be logically considered an extension of that object's public interface
         (essentially at the same level as the object's public functions). In these
         cases, programmers might chose to program the friend function contracts using
-        <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
+        <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
         (instead of <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.function">boost::contract::function</link></computeroutput>)
         so to also check the class invariants of the object passed as parameter (and
         not just pre- and postconditions). For example (see <ulink url="../../example/features/friend_invariant.cpp"><literal moreinfo="none">friend_invariant.cpp</literal></ulink>):
           This is reasonable for proposals that add contracts to the core language
           because friend functions are not always meant to extend an object public
           interface and C++ does not provide a mechanism to programmatically specify
-          when they do and when they do not. However, this library adds the flexibility
+          when they do and when they do not. However, this library provides the flexibility
           to let programmers manually specify when friend functions should also check
-          class invariants of the objects they take as parameters (using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>)
+          class invariants of the objects they take as parameters (using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>)
           and when they should not (using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.function">boost::contract::function</link></computeroutput>
           instead).
         </para>
     <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">check</phrase> <phrase role="identifier">inv1</phrase> <phrase role="special">=</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">public_function</phrase><phrase role="special">(&amp;</phrase><phrase role="identifier">object1</phrase><phrase role="special">);</phrase>
     <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">check</phrase> <phrase role="identifier">inv2</phrase> <phrase role="special">=</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">public_function</phrase><phrase role="special">(</phrase><phrase role="identifier">object2</phrase><phrase role="special">);</phrase>
     <phrase role="comment">// Check postconditions and exception guarantees.</phrase>
-    <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">check</phrase> <phrase role="identifier">post_except</phrase> <phrase role="special">=</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">function</phrase><phrase role="special">()</phrase>
+    <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">check</phrase> <phrase role="identifier">postex</phrase> <phrase role="special">=</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">function</phrase><phrase role="special">()</phrase>
         <phrase role="special">.</phrase><phrase role="identifier">postcondition</phrase><phrase role="special">(...)</phrase>
         <phrase role="special">.</phrase><phrase role="identifier">except</phrase><phrase role="special">(...)</phrase>
     <phrase role="special">;</phrase>
         and exception guarantees of the friend function (see <link linkend="boost_contract.tutorial.non_member_functions">Non-Member
         Functions</link> and <link linkend="boost_contract.tutorial.public_functions">Public
         Functions</link> for information on how the RAII objects returned by <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.function">boost::contract::function</link></computeroutput>
-        and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
-        check contract conditions). The example above is programmed to check <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">class1</phrase></computeroutput> invariants before <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">class2</phrase></computeroutput> invariants (but the order could
+        and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
+        check contract conditions). The example above is programmed to check <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">class1</phrase></computeroutput> invariants before <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">class2</phrase></computeroutput> invariants (but that order could
         have been inverted if programmers so chose).
       </para>
       <note>
           In the example above, preconditions are intentionally programmed to be
           checked before class invariants so the objects passed to the friend function
           can be validated by the preconditions before they are passed as pointers
-          to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
+          to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
           (e.g., check <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">object2</phrase></computeroutput> is
           not null). (Within member functions instead, the object pointer <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">this</phrase></computeroutput> is always well-formed, its validation
-          is never needed, and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
+          is never needed, and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
           checks class invariants before checking preconditions so programming preconditions
           can be simplified assuming the class invariants are satisfied already,
           see <link linkend="boost_contract.contract_programming_overview.public_function_calls">Public
       <para>
         No special attention is required when using this library with overloaded
         functions or constructors. The only exception is for the function pointer
-        passed to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
+        passed to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
         from public function overrides (see <link linkend="boost_contract.tutorial.public_function_overrides__subcontracting_">Public
         Function Overrides</link>). When the name of public function override are
         also overloaded, the related function pointer cannot be automatically deduced
         C++). <footnote id="boost_contract.advanced.function_overloads.f0">
         <para>
           <emphasis role="bold">Rationale:</emphasis> In order to avoid copies, this
-          library takes all function arguments and the return value passed to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
+          library takes all function arguments and the return value passed to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
           as references when used within public function overrides. Therefore, the
           library cannot differentiate when the actual function argument and return
           types are passed by reference and when they are not. As a result, the library
           cannot automatically reconstruct the type of the enclosing public function
           so this type must be deduced from the function pointer passed by programmers
-          to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>.
+          to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>.
           When this automatic deduction is not possible due to overloaded function
           names, programmers must explicitly use <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">static_cast</phrase></computeroutput>
           to resolve ambiguities as usual in C++ with pointers to overloaded functions.
         </para>
         </footnote> For example, note how <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">static_cast</phrase></computeroutput>
-        is used in the following calls to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
+        is used in the following calls to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
         (see <ulink url="../../example/features/overload.cpp"><literal moreinfo="none">overload.cpp</literal></ulink>):
       </para>
       <para>
       </para>
       <para>
         Overloaded functions have the same function name so the same <literal moreinfo="none">override_<emphasis>function-name</emphasis></literal>
-        type can be reused as template parameter for all <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
+        type can be reused as template parameter for all <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
         calls in a given class. Therefore, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OVERRIDE">BOOST_CONTRACT_OVERRIDE</link></computeroutput>
         only needs to be invoked once for a function name in a given class, even
         when that function name is overloaded.
         <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">check</phrase> <phrase role="identifier">c</phrase> <phrase role="special">=</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">function</phrase><phrase role="special">()</phrase>
             <phrase role="special">.</phrase><phrase role="identifier">precondition</phrase><phrase role="special">([&amp;]</phrase> <phrase role="special">{</phrase>
                 <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase>
-                        <phrase role="identifier">total</phrase> <phrase role="special">+</phrase> <phrase role="identifier">x</phrase> <phrase role="special">&lt;=</phrase> <phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">numeric_limits</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">int</phrase><phrase role="special">&gt;::</phrase><phrase role="identifier">max</phrase><phrase role="special">());</phrase>
+                        <phrase role="identifier">total</phrase> <phrase role="special">&lt;</phrase> <phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">numeric_limits</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">int</phrase><phrase role="special">&gt;::</phrase><phrase role="identifier">max</phrase><phrase role="special">()</phrase> <phrase role="special">-</phrase> <phrase role="identifier">x</phrase><phrase role="special">);</phrase>
             <phrase role="special">})</phrase>
             <phrase role="special">.</phrase><phrase role="identifier">postcondition</phrase><phrase role="special">([&amp;]</phrase> <phrase role="special">{</phrase>
                 <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">total</phrase> <phrase role="special">==</phrase> <phrase role="special">*</phrase><phrase role="identifier">old_total</phrase> <phrase role="special">+</phrase> <phrase role="identifier">x</phrase><phrase role="special">);</phrase>
     <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">check</phrase> <phrase role="identifier">c</phrase> <phrase role="special">=</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">function</phrase><phrase role="special">()</phrase>
         <phrase role="special">.</phrase><phrase role="identifier">precondition</phrase><phrase role="special">([&amp;]</phrase> <phrase role="special">{</phrase>
             <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase>
-                    <phrase role="identifier">total</phrase> <phrase role="special">+</phrase> <phrase role="special">*</phrase><phrase role="identifier">i</phrase> <phrase role="special">&lt;=</phrase> <phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">numeric_limits</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">int</phrase><phrase role="special">&gt;::</phrase><phrase role="identifier">max</phrase><phrase role="special">());</phrase>
+                    <phrase role="identifier">total</phrase> <phrase role="special">&lt;</phrase> <phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">numeric_limits</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">int</phrase><phrase role="special">&gt;::</phrase><phrase role="identifier">max</phrase><phrase role="special">()</phrase> <phrase role="special">-</phrase> <phrase role="special">*</phrase><phrase role="identifier">i</phrase><phrase role="special">);</phrase>
         <phrase role="special">})</phrase>
         <phrase role="special">.</phrase><phrase role="identifier">postcondition</phrase><phrase role="special">([&amp;]</phrase> <phrase role="special">{</phrase>
             <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">total</phrase> <phrase role="special">==</phrase> <phrase role="special">*</phrase><phrase role="identifier">old_total</phrase> <phrase role="special">+</phrase> <phrase role="special">*</phrase><phrase role="identifier">i</phrase><phrase role="special">);</phrase>
 </programlisting>
       </para>
       <para>
-        Finally, at the moment this library does not support contracts for functions
-        and classes declared <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">constexpr</phrase></computeroutput>.
-        <footnote id="boost_contract.advanced.lambdas__loops__code_blocks__and__constexpr__.f0">
+        The library does not support contracts for functions and classes declared
+        <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">constexpr</phrase></computeroutput>. <footnote id="boost_contract.advanced.lambdas__loops__code_blocks__and__constexpr__.f0">
         <para>
           <emphasis role="bold">Rationale:</emphasis> In general, it might be useful
           to specify contracts for <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">constexpr</phrase></computeroutput>
-          functions and literal classes. However, the implementation of this library
-          cannot support contracts for <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">constexpr</phrase></computeroutput>
+          functions and literal classes. However, the current implementation of this
+          library cannot support contracts for <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">constexpr</phrase></computeroutput>
           functions and classes because C++ does not currently allow <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">constexpr</phrase></computeroutput> functions to do the following:
           Declare local variables of (literal) types with non-trivial <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">constexpr</phrase></computeroutput> destructors (this RAII technique
           is used by this library to check invariants, postconditions, and exceptions
       <title><link linkend="boost_contract.advanced.implementation_checks">Implementation
       Checks</link></title>
       <para>
-        This library provides a mechanism to check assertions within implementation
-        code a part from preconditions, postconditions, exceptions guarantees, and
-        class invariants. Implementation checks are programmed using a nullary functor
-        that is directly assigned to a <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.check">boost::contract::check</link></computeroutput>
+        This library provides also a mechanism to check assertions within implementation
+        code (differently from preconditions, postconditions, exceptions guarantees,
+        and class invariants that are instead checked before or after code that implements
+        a function body). These <emphasis>implementation checks</emphasis> are programmed
+        using a nullary functor that is directly assigned to a <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.check">boost::contract::check</link></computeroutput>
         object declaration right at the place within the code where the checks need
         to be performed (without calling <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.function">boost::contract::function</link></computeroutput>,
-        <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>,
+        <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>,
         etc. in this case). For example (see <ulink url="../../example/features/check.cpp"><literal moreinfo="none">check.cpp</literal></ulink>):
       </para>
       <para>
 <programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">int</phrase> <phrase role="identifier">main</phrase><phrase role="special">()</phrase> <phrase role="special">{</phrase>
     <phrase role="comment">// Implementation checks (via nullary functor).</phrase>
-    <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">check</phrase> <phrase role="identifier">c</phrase> <phrase role="special">=</phrase> <phrase role="special">[&amp;]</phrase> <phrase role="special">{</phrase>
+    <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">check</phrase> <phrase role="identifier">c</phrase> <phrase role="special">=</phrase> <phrase role="special">[]</phrase> <phrase role="special">{</phrase>
         <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">gcd</phrase><phrase role="special">(</phrase><phrase role="number">12</phrase><phrase role="special">,</phrase> <phrase role="number">28</phrase><phrase role="special">)</phrase> <phrase role="special">==</phrase> <phrase role="number">4</phrase><phrase role="special">);</phrase>
         <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">gcd</phrase><phrase role="special">(</phrase><phrase role="number">4</phrase><phrase role="special">,</phrase> <phrase role="number">14</phrase><phrase role="special">)</phrase> <phrase role="special">==</phrase> <phrase role="number">2</phrase><phrase role="special">);</phrase>
     <phrase role="special">};</phrase>
       </para>
       <para>
         The implementation check functor should capture all the variables that it
-        needs to assert the implementation checks. These variables can be captured
-        by value when the overhead of copying such variables is acceptable. In any
-        case, implementation checks should not modify the value of the captured variables,
-        even when those are captured by reference (see <link linkend="boost_contract.contract_programming_overview.constant_correctness">Constant-Correctness</link>).
+        needs for its assertions. These variables can be captured by value when the
+        overhead of copying such variables is acceptable. In any case, programmers
+        should not write implementation checks that modify the value of the captured
+        variables, even when those are captured by reference (see <link linkend="boost_contract.contract_programming_overview.constant_correctness">Constant-Correctness</link>).
       </para>
       <para>
         Any code can be programmed in the implementation check functor, but it is
         (to avoid programming complex checks that might be buggy and also slow to
         check at run-time). It is also recommended to use <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput>
         to program the assertions because that enables this library to print informative
-        error messages when the asserted conditions are evaluated to be false (this
-        is not a variadic macro, see <link linkend="boost_contract.extras.no_macros__and_no_variadic_macros_">No
+        error messages when the asserted conditions are evaluated to be false (note
+        that this is not a variadic macro, see <link linkend="boost_contract.extras.no_macros__and_no_variadic_macros_">No
         Macros</link>):
       </para>
-<programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">bool_cond</phrase><phrase role="special">)</phrase>
-<phrase role="comment">// Or, if `bool_cond` contains commas `,` not already within parenthesis `()`...</phrase>
-<phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">((</phrase><phrase role="identifier">bool_cond</phrase><phrase role="special">))</phrase> <phrase role="comment">// ...use extra parenthesis (not a variadic macro).</phrase>
+<programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><literal moreinfo="none"><emphasis>boolean-condition</emphasis></literal><phrase role="special">)</phrase>
+<phrase role="comment">// Or, if `boolean-condition` contains commas `,` not already within parenthesis `()`...</phrase>
+<phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">((</phrase><literal moreinfo="none"><emphasis>boolean-condition</emphasis></literal><phrase role="special">))</phrase> <phrase role="comment">// ...use extra parenthesis (not a variadic macro).</phrase>
 </programlisting>
       <para>
         This library will automatically call the failure handler <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.check_failure">boost::contract::check_failure</link></computeroutput>
         if any of the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput>
-        conditions are false and, more in general, if calling the implementation
-        check functor throws any exception. By default, this failure handler prints
-        an error message to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">cerr</phrase></computeroutput> and terminates the program calling
+        conditions are false or, more in general, if calling the implementation check
+        functor throws any exception. By default, this failure handler prints an
+        error message to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">cerr</phrase></computeroutput> and terminates the program calling
         <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">terminate</phrase></computeroutput> (see <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__">Throw
         on Failures</link> to change the failure handler to throw exceptions, exit
         the program with an error code, etc.).
       </para>
       <para>
         Similarly to the C-style <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">assert</phrase></computeroutput>
-        macro that is disable when <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">NDEBUG</phrase></computeroutput>
+        macro that is disabled when <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">NDEBUG</phrase></computeroutput>
         is defined, implementation checks are disabled when <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_NO_CHECKS">BOOST_CONTRACT_NO_CHECKS</link></computeroutput>
-        is defined. That will skip all implementation checks at run-time but it will
-        not eliminate some of the overhead of executing and compiling the related
-        <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.check">boost::contract::check</link></computeroutput>
+        is defined (see <link linkend="boost_contract.extras.disable_contract_checking">Disable
+        Contract Checking</link>). That will skip all implementation checks at run-time
+        but it will not eliminate some of the overhead of executing and compiling
+        the related <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.check">boost::contract::check</link></computeroutput>
         declarations. Alternatively, this library provides the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_CHECK">BOOST_CONTRACT_CHECK</link></computeroutput>
-        macro that allows to completely remove run- and compile-time overhead of
+        macro that allows to completely remove run- and compile-time overheads of
         implementation checks when <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_NO_CHECKS">BOOST_CONTRACT_NO_CHECKS</link></computeroutput>
-        is defined (this is not a variadic macro):
+        is defined (note that this is not a variadic macro):
       </para>
-<programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_CONTRACT_CHECK</phrase><phrase role="special">(</phrase><phrase role="identifier">bool_cond</phrase><phrase role="special">)</phrase>
-<phrase role="comment">// Or, if `bool_cond` contains commas `,` not already within parenthesis `()`...</phrase>
-<phrase role="identifier">BOOST_CONTRACT_CHECK</phrase><phrase role="special">((</phrase><phrase role="identifier">bool_cond</phrase><phrase role="special">))</phrase> <phrase role="comment">// ...use extra parenthesis (not a variadic macro).</phrase>
+<programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_CONTRACT_CHECK</phrase><phrase role="special">(</phrase><literal moreinfo="none"><emphasis>boolean-condition</emphasis></literal><phrase role="special">)</phrase>
+<phrase role="comment">// Or, if `boolean-condition` contains commas `,` not already within parenthesis `()`...</phrase>
+<phrase role="identifier">BOOST_CONTRACT_CHECK</phrase><phrase role="special">((</phrase><literal moreinfo="none"><emphasis>boolean-condition</emphasis></literal><phrase role="special">))</phrase> <phrase role="comment">// ...use extra parenthesis (not a variadic macro).</phrase>
 </programlisting>
       <para>
         For example (see <ulink url="../../example/features/check_macro.cpp"><literal moreinfo="none">check_macro.cpp</literal></ulink>):
         (instead of a nullary functor like <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.check">boost::contract::check</link></computeroutput>
         does). <footnote id="boost_contract.advanced.implementation_checks.f0">
         <para>
-          Of course, nothing prevents programmers from calling functors to specify
+          Of course, nothing prevents programmers from calling functors within <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_CHECK">BOOST_CONTRACT_CHECK</link></computeroutput> to specify
           boolean conditions when if-guards and other statements are required to
           assert the implementation checks. For example, programmers can use C++11
           lambda functions to define and call such functors in place where the implementation
-          checks are specified <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_CONTRACT_CHECK</phrase><phrase role="special">([...]</phrase> <phrase role="special">-&gt;</phrase> <phrase role="keyword">bool</phrase> <phrase role="special">{</phrase> <phrase role="special">...</phrase> <phrase role="special">}</phrase> <phrase role="special">())</phrase></computeroutput>.
+          checks are specified:
+<programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_CONTRACT_CHECK</phrase><phrase role="special">([&amp;]</phrase> <phrase role="special">-&gt;</phrase> <phrase role="keyword">bool</phrase> <phrase role="special">{</phrase>
+    <phrase role="keyword">if</phrase><phrase role="special">(</phrase><phrase role="identifier">even_numbers</phrase><phrase role="special">)</phrase> <phrase role="keyword">return</phrase> <phrase role="identifier">gcd</phrase><phrase role="special">(</phrase><phrase role="identifier">x</phrase><phrase role="special">,</phrase> <phrase role="identifier">y</phrase><phrase role="special">)</phrase> <phrase role="special">==</phrase> <phrase role="number">2</phrase><phrase role="special">;</phrase>
+    <phrase role="keyword">else</phrase> <phrase role="keyword">return</phrase> <phrase role="identifier">gcd</phrase><phrase role="special">(</phrase><phrase role="identifier">x</phrase><phrase role="special">,</phrase> <phrase role="identifier">y</phrase><phrase role="special">)</phrase> <phrase role="special">==</phrase> <phrase role="number">3</phrase><phrase role="special">;</phrase>
+<phrase role="special">}</phrase> <phrase role="special">());</phrase>
+</programlisting>
         </para>
         </footnote> Using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_CHECK">BOOST_CONTRACT_CHECK</link></computeroutput>
         is essentially equivalent to using the C-style <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">assert</phrase></computeroutput>
             then this library will call <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.check_failure">boost::contract::check_failure</link></computeroutput>
             (instead <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">assert</phrase></computeroutput> calls
             <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">abort</phrase></computeroutput> if the asserted condition is
-            false and unwinds the stack if evaluating the condition throws an exception).
+            false and it unwinds the stack if evaluating the condition throws an
+            exception).
           </simpara>
         </listitem>
         <listitem>
           <simpara>
             Implementation checks are automatically disabled when other contract
             conditions specified using this library are already being checked (to
-            avoid infinite recursion, see <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870534752">BOOST_CONTRACT_ALL_DISABLE_NO_ASSERTION</link></computeroutput>).
+            avoid infinite recursion, see <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999679376">BOOST_CONTRACT_ALL_DISABLE_NO_ASSERTION</link></computeroutput>).
           </simpara>
         </listitem>
       </itemizedlist>
-      <para>
-        (See <link linkend="boost_contract.extras.disable_contract_checking">Disable
-        Contract Checking</link> and <link linkend="boost_contract.extras.disable_contract_compilation__macro_interface_">Disable
-        Contract Compilation</link> for macros to completely remove run- and compile-time
-        overhead also for preconditions, postconditions, exception guarantees, and
-        class invariants.)
-      </para>
     </section>
-    <section id="boost_contract.advanced.old_value_copies_at_body">
-      <title><link linkend="boost_contract.advanced.old_value_copies_at_body">Old
-      Value Copies at Body</link></title>
+    <section id="boost_contract.advanced.old_values_copied_at_body">
+      <title><link linkend="boost_contract.advanced.old_values_copied_at_body">Old
+      Values Copied at Body</link></title>
       <para>
         In the examples seen so far, old value variables of type <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.old_ptr">boost::contract::old_ptr</link></computeroutput>
         are initialized to a copy of the expression passed to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OLDOF">BOOST_CONTRACT_OLDOF</link></computeroutput>
-        as soon as they are declared. This is correctly happens before the function
+        as soon as they are declared. That correctly happens before the function
         body is executed but also before the contract is declared, therefore even
         before class invariants (for public functions) and preconditions are checked
-        at function entry. This might work well in most practical cases, however
-        technically old values should be copied before executing the function body
-        but <emphasis>after</emphasis> checking entry class invariants and preconditions
-        (see <link linkend="boost_contract.contract_programming_overview.assertions">Assertions</link>).
+        at function entry. This might work well in most practical cases however,
+        technically speaking, old values should be copied before executing the function
+        body but <emphasis>after</emphasis> checking class invariants and preconditions
+        at function entry (see <link linkend="boost_contract.contract_programming_overview.assertions">Assertions</link>).
         Specifically, there could be cases in which it makes sense to evaluate the
         expressions passed to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OLDOF">BOOST_CONTRACT_OLDOF</link></computeroutput>
         only under the assumption that assertions programmed in class invariants
       <para>
         This library allows to construct <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.old_ptr">boost::contract::old_ptr</link></computeroutput>
         variables using their default constructor (equivalent to a null pointer)
-        and then to later assign them to a copy of the expression passed to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OLDOF">BOOST_CONTRACT_OLDOF</link></computeroutput> in a nullary
+        and then to later assign them to a copy of the expression specified by <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OLDOF">BOOST_CONTRACT_OLDOF</link></computeroutput> in a nullary
         functor <literal moreinfo="none"><emphasis>d</emphasis></literal><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">()</phrase></computeroutput>
         passed to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">.</phrase><phrase role="identifier">old</phrase><phrase role="special">(</phrase></computeroutput><literal moreinfo="none"><emphasis>d</emphasis></literal><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">)</phrase></computeroutput>. The functor <literal moreinfo="none"><emphasis>d</emphasis></literal><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">()</phrase></computeroutput> is called by this library before the function
         body is executed but only after class invariants and preconditions are checked.
         wen these are all present (see <link linkend="boost_contract.tutorial.preconditions">Preconditions</link>,
         <link linkend="boost_contract.tutorial.postconditions">Postconditions</link>,
         and <link linkend="boost_contract.tutorial.exception_guarantees">Exception
-        Guarantees</link>). <footnote id="boost_contract.advanced.old_value_copies_at_body.f0">
+        Guarantees</link>). <footnote id="boost_contract.advanced.old_values_copied_at_body.f0">
         <para>
           <emphasis role="bold">Rationale:</emphasis> Functors for preconditions,
           old value assignments, postconditions, and exception guarantees are all
           optional but when specified, they must be specified in that order. Such
-          order is enforced by the fact that <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.specify__idm45123870039968">boost::contract::specify_precondition_old_postcondition_except</link></computeroutput>,
-          <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.specify__idm45123870103104">boost::contract::specify_old_postcondition_except</link></computeroutput>,
-          <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.specify__idm45123870066880">boost::contract::specify_postcondition_except</link></computeroutput>,
+          order is enforced by the fact that <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.specify__idm45394999179040">boost::contract::specify_precondition_old_postcondition_except</link></computeroutput>,
+          <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.specify__idm45394999245856">boost::contract::specify_old_postcondition_except</link></computeroutput>,
+          <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.specify__idm45394999207792">boost::contract::specify_postcondition_except</link></computeroutput>,
           <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.specify_except">boost::contract::specify_except</link></computeroutput>,
           and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.specify_nothing">boost::contract::specify_nothing</link></computeroutput>
           provide a progressively smaller subset of their <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">.</phrase><phrase role="identifier">precondition</phrase><phrase role="special">(...)</phrase></computeroutput>,
       <para>
         For example, the following old value expression <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">s</phrase><phrase role="special">[</phrase><phrase role="identifier">index</phrase><phrase role="special">]</phrase></computeroutput> passed to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OLDOF">BOOST_CONTRACT_OLDOF</link></computeroutput>
         is valid only after the precondition has checked that <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">index</phrase></computeroutput>
-        is within valid range <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">index</phrase> <phrase role="special">&lt;</phrase> <phrase role="identifier">s</phrase><phrase role="special">.</phrase><phrase role="identifier">size</phrase><phrase role="special">()</phrase></computeroutput>.
-        Therefore, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">old_y</phrase></computeroutput> is first
+        is within the valid range <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">index</phrase>
+        <phrase role="special">&lt;</phrase> <phrase role="identifier">s</phrase><phrase role="special">.</phrase><phrase role="identifier">size</phrase><phrase role="special">()</phrase></computeroutput>.
+        Therefore, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">old_char</phrase></computeroutput> is first
         declared using its default constructor (i.e., initialized to a null pointer)
         and later assigned to a copy of <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">s</phrase><phrase role="special">[</phrase><phrase role="identifier">index</phrase><phrase role="special">]</phrase></computeroutput> in <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">.</phrase><phrase role="identifier">old</phrase><phrase role="special">(...)</phrase></computeroutput>
         after the precondition has checked <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">index</phrase></computeroutput>
       <para>
 <programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">char</phrase> <phrase role="identifier">replace</phrase><phrase role="special">(</phrase><phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">string</phrase><phrase role="special">&amp;</phrase> <phrase role="identifier">s</phrase><phrase role="special">,</phrase> <phrase role="keyword">unsigned</phrase> <phrase role="identifier">index</phrase><phrase role="special">,</phrase> <phrase role="keyword">char</phrase> <phrase role="identifier">x</phrase><phrase role="special">)</phrase> <phrase role="special">{</phrase>
     <phrase role="keyword">char</phrase> <phrase role="identifier">result</phrase><phrase role="special">;</phrase>
-    <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">old_ptr</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">char</phrase><phrase role="special">&gt;</phrase> <phrase role="identifier">old_y</phrase><phrase role="special">;</phrase> <phrase role="comment">// Null, old value copied later...</phrase>
+    <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">old_ptr</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">char</phrase><phrase role="special">&gt;</phrase> <phrase role="identifier">old_char</phrase><phrase role="special">;</phrase> <phrase role="comment">// Null, old value copied later...</phrase>
     <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">check</phrase> <phrase role="identifier">c</phrase> <phrase role="special">=</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">function</phrase><phrase role="special">()</phrase>
         <phrase role="special">.</phrase><phrase role="identifier">precondition</phrase><phrase role="special">([&amp;]</phrase> <phrase role="special">{</phrase>
             <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">index</phrase> <phrase role="special">&lt;</phrase> <phrase role="identifier">s</phrase><phrase role="special">.</phrase><phrase role="identifier">size</phrase><phrase role="special">());</phrase>
         <phrase role="special">})</phrase>
         <phrase role="special">.</phrase><phrase role="identifier">old</phrase><phrase role="special">([&amp;]</phrase> <phrase role="special">{</phrase> <phrase role="comment">// ...after preconditions (and invariants) checked.</phrase>
-            <phrase role="identifier">old_y</phrase> <phrase role="special">=</phrase> <phrase role="identifier">BOOST_CONTRACT_OLDOF</phrase><phrase role="special">(</phrase><phrase role="identifier">s</phrase><phrase role="special">[</phrase><phrase role="identifier">index</phrase><phrase role="special">]);</phrase>
+            <phrase role="identifier">old_char</phrase> <phrase role="special">=</phrase> <phrase role="identifier">BOOST_CONTRACT_OLDOF</phrase><phrase role="special">(</phrase><phrase role="identifier">s</phrase><phrase role="special">[</phrase><phrase role="identifier">index</phrase><phrase role="special">]);</phrase>
         <phrase role="special">})</phrase>
         <phrase role="special">.</phrase><phrase role="identifier">postcondition</phrase><phrase role="special">([&amp;]</phrase> <phrase role="special">{</phrase>
             <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">s</phrase><phrase role="special">[</phrase><phrase role="identifier">index</phrase><phrase role="special">]</phrase> <phrase role="special">==</phrase> <phrase role="identifier">x</phrase><phrase role="special">);</phrase>
-            <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">result</phrase> <phrase role="special">==</phrase> <phrase role="special">*</phrase><phrase role="identifier">old_y</phrase><phrase role="special">);</phrase>
+            <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">result</phrase> <phrase role="special">==</phrase> <phrase role="special">*</phrase><phrase role="identifier">old_char</phrase><phrase role="special">);</phrase>
         <phrase role="special">})</phrase>
     <phrase role="special">;</phrase>
 
 </programlisting>
       </para>
       <para>
-        The functor passed to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">.</phrase><phrase role="identifier">old</phrase><phrase role="special">(...)</phrase></computeroutput> should capture all variables it needs
-        to evaluate to copy the old value expressions passed to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OLDOF">BOOST_CONTRACT_OLDOF</link></computeroutput>.
+        The functor passed to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">.</phrase><phrase role="identifier">old</phrase><phrase role="special">(...)</phrase></computeroutput> should capture all the variables that
+        it needs to evaluate the old value expressions passed to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OLDOF">BOOST_CONTRACT_OLDOF</link></computeroutput>.
         In general, these variables should be captured by reference and not by value
-        (because old values need to make copies of the values the captured variables
-        will have just before executing the function body, and not copy the values
-        these variables had when the functor passed to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">.</phrase><phrase role="identifier">old</phrase><phrase role="special">(...)</phrase></computeroutput>
-        was first declared). In any case, the functor passed to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">.</phrase><phrase role="identifier">old</phrase><phrase role="special">(...)</phrase></computeroutput>
-        should modify only old values and not the values of other captured variables
-        (see <link linkend="boost_contract.contract_programming_overview.constant_correctness">Constant-Correctness</link>).
+        (because old values need to copy the values the captured variables will have
+        just before executing the function body, and not the values these variables
+        had when the functor passed to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">.</phrase><phrase role="identifier">old</phrase><phrase role="special">(...)</phrase></computeroutput>
+        was first declared). In any case, programmers should write the functor passed
+        to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">.</phrase><phrase role="identifier">old</phrase><phrase role="special">(...)</phrase></computeroutput> so that it modifies only old values
+        and not the values of other captured variables, even when those are captured
+        by reference (see <link linkend="boost_contract.contract_programming_overview.constant_correctness">Constant-Correctness</link>).
       </para>
       <para>
         This library will automatically call the failure handler <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.old_failure">boost::contract::old_failure</link></computeroutput>
           automatically causes the enclosing function to thrown an exception (this
           might not be a significant difference in practice, but it could be an additional
           reason to use <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">.</phrase><phrase role="identifier">old</phrase><phrase role="special">(...)</phrase></computeroutput> instead of assigning old values when
-          they are declared before the contract). <footnote id="boost_contract.advanced.old_value_copies_at_body.f1">
+          they are declared before the contract). <footnote id="boost_contract.advanced.old_values_copied_at_body.f1">
           <para>
             <emphasis role="bold">Rationale:</emphasis> It would be possible for
             this library to internally wrap all old value operations (<computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.old_ptr">boost::contract::old_ptr</link></computeroutput> copy
-            constructor, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.make_old_idm45123869837456">boost::contract::make_old</link></computeroutput>,
+            constructor, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.make_old_idm45394998968720">boost::contract::make_old</link></computeroutput>,
             etc.) with try-catch statements so to call <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.old_failure">boost::contract::old_failure</link></computeroutput>
             also when old values are copied when they are constructed outside <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">.</phrase><phrase role="identifier">old</phrase><phrase role="special">(...)</phrase></computeroutput>. However, that will prevent this
             library from knowing the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.from">boost::contract::from</link></computeroutput>
       <para>
         As seen in <link linkend="boost_contract.tutorial.public_function_overrides__subcontracting_">Public
         Function Overrides</link>, the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OVERRIDE">BOOST_CONTRACT_OVERRIDE</link></computeroutput>
-        macro has to be used to declare a type <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">override_</phrase><phrase role="special">...</phrase></computeroutput> that is passed to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
+        macro has to be used to declare the type <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">override_</phrase><phrase role="special">...</phrase></computeroutput> that is passed as an explicit template
+        parameter to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
         for public function overrides. The function names passed to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OVERRIDE">BOOST_CONTRACT_OVERRIDE</link></computeroutput>
         (and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OVERRIDES">BOOST_CONTRACT_OVERRIDES</link></computeroutput>)
         should never start with an underscore to avoid generating names containing
-        double underscores <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">override__</phrase><phrase role="special">...</phrase></computeroutput> (which are reserved by the C++ standard).
-        There is a separate macro <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123869781472">BOOST_CONTRACT_NAMED_OVERRIDE</link></computeroutput>
+        double underscores <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">override__</phrase><phrase role="special">...</phrase></computeroutput> (because all symbols containing double
+        underscores <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">...</phrase><phrase role="identifier">__</phrase><phrase role="special">...</phrase></computeroutput> are reserved symbols in the C++ standard).
+        There is a separate macro <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394998912688">BOOST_CONTRACT_NAMED_OVERRIDE</link></computeroutput>
         that can be used to explicitly specify the name of the type being declared:
         <footnote id="boost_contract.advanced.named_overrides.f0">
         <para>
-          <emphasis role="bold">Rationale:</emphasis> A different macro <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123869781472">BOOST_CONTRACT_NAMED_OVERRIDE</link></computeroutput>
+          <emphasis role="bold">Rationale:</emphasis> A different macro <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394998912688">BOOST_CONTRACT_NAMED_OVERRIDE</link></computeroutput>
           is used instead of overloading <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OVERRIDE">BOOST_CONTRACT_OVERRIDE</link></computeroutput>
           using variadic macros because the override macro cannot be programmed manually
           by users so making it a variadic would prevent to use this library on compilers
         </para>
         </footnote>
       </para>
-<programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_CONTRACT_OVERRIDE</phrase><phrase role="special">(</phrase><phrase role="identifier">func_name</phrase><phrase role="special">)</phrase>                  <phrase role="comment">// Generate `override_...`.</phrase>
-<phrase role="identifier">BOOST_CONTRACT_NAMED_OVERRIDE</phrase><phrase role="special">(</phrase><phrase role="identifier">type_name</phrase><phrase role="special">,</phrase> <phrase role="identifier">func_name</phrase><phrase role="special">)</phrase> <phrase role="comment">// Generate `type_name`.</phrase>
+<programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_CONTRACT_OVERRIDE</phrase><phrase role="special">(</phrase><literal moreinfo="none"><emphasis>function-name</emphasis></literal><phrase role="special">)</phrase>                  <phrase role="comment">// Generate `override_...`.</phrase>
+<phrase role="identifier">BOOST_CONTRACT_NAMED_OVERRIDE</phrase><phrase role="special">(</phrase><literal moreinfo="none"><emphasis>type-name</emphasis></literal><phrase role="special">,</phrase> <literal moreinfo="none"><emphasis>function-name</emphasis></literal><phrase role="special">)</phrase> <phrase role="comment">// Generate `type-name`.</phrase>
 </programlisting>
       <para>
         For example, the following public function override is named <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">_1</phrase></computeroutput> so <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_CONTRACT_OVERRIDE</phrase><phrase role="special">(</phrase><phrase role="identifier">_1</phrase><phrase role="special">)</phrase></computeroutput>
         would declare a type named <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">override__1</phrase></computeroutput>
-        (which is reserved in C++ because it contains double underscores <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">__</phrase></computeroutput>). thus <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_CONTRACT_NAMED_OVERRIDE</phrase><phrase role="special">(</phrase><phrase role="identifier">override1</phrase><phrase role="special">,</phrase> <phrase role="identifier">_1</phrase><phrase role="special">)</phrase></computeroutput>
+        (which is reserved symbol in C++ because it contains a double underscore
+        <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">__</phrase></computeroutput>), thus <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_CONTRACT_NAMED_OVERRIDE</phrase><phrase role="special">(</phrase><phrase role="identifier">override1</phrase><phrase role="special">,</phrase> <phrase role="identifier">_1</phrase><phrase role="special">)</phrase></computeroutput>
         is used to name the type <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">override1</phrase></computeroutput>
         instead (see <ulink url="../../example/features/named_override.cpp"><literal moreinfo="none">named_override.cpp</literal></ulink>):
       </para>
 </programlisting>
       </para>
       <para>
-        The <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123869781472">BOOST_CONTRACT_NAMED_OVERRIDE</link></computeroutput>
+        The <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394998912688">BOOST_CONTRACT_NAMED_OVERRIDE</link></computeroutput>
         macro can also be used when the name <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">override_</phrase><phrase role="special">...</phrase></computeroutput> generated by <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OVERRIDE">BOOST_CONTRACT_OVERRIDE</link></computeroutput>
         would clash with other names in user code, to generate names in CamelCase
         or in any other preferred style, and in any other case when programmers need
       </para>
       <para>
         Note that there is not a <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_CONTRACT_NAMED_OVERRIDES</phrase></computeroutput>
-        macro so <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123869781472">BOOST_CONTRACT_NAMED_OVERRIDE</link></computeroutput>
+        macro so <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394998912688">BOOST_CONTRACT_NAMED_OVERRIDE</link></computeroutput>
         needs to be invoked separately on each function name (there is instead a
         <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OVERRIDES">BOOST_CONTRACT_OVERRIDES</link></computeroutput>
         macro as seen in <link linkend="boost_contract.tutorial.public_function_overrides__subcontracting_">Public
           <emphasis role="bold">Rationale:</emphasis> The syntax for invoking a possible
           <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_CONTRACT_NAMED_OVERRIDES</phrase></computeroutput>
           macro would need to be something like <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_CONTRACT_NAMED_OVERRIDES</phrase><phrase role="special">(</phrase><phrase role="identifier">type_name1</phrase><phrase role="special">,</phrase> <phrase role="identifier">func_name1</phrase><phrase role="special">,</phrase> <phrase role="identifier">type_name2</phrase><phrase role="special">,</phrase> <phrase role="identifier">func_name2</phrase><phrase role="special">,</phrase> <phrase role="special">...)</phrase></computeroutput>.
-          The authors found such a syntax less readable than repeating single <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123869781472">BOOST_CONTRACT_NAMED_OVERRIDE</link></computeroutput>
+          The authors found such a syntax less readable than repeating single <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394998912688">BOOST_CONTRACT_NAMED_OVERRIDE</link></computeroutput>
           invocations as in <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_CONTRACT_NAMED_OVERRIDE</phrase><phrase role="special">(</phrase><phrase role="identifier">type_name1</phrase><phrase role="special">,</phrase> <phrase role="identifier">func_name1</phrase><phrase role="special">)</phrase> <phrase role="identifier">BOOST_CONTRACT_NAMED_OVERRIDE</phrase><phrase role="special">(</phrase><phrase role="identifier">type_name2</phrase><phrase role="special">,</phrase> <phrase role="identifier">func_name2</phrase><phrase role="special">)</phrase> <phrase role="special">...</phrase></computeroutput> so
           decided not to provide the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_CONTRACT_NAMED_OVERRIDES</phrase></computeroutput>
           macro.
     <section id="boost_contract.advanced.access_specifiers">
       <title><link linkend="boost_contract.advanced.access_specifiers">Access Specifiers</link></title>
       <para>
-        As we have seen so far, programmers are required to decorate their classes
-        declaring the following extra members that are internally used by this library
-        to check contracts:
+        As seen thus far, this library requires programmers to decorate their classes
+        declaring the following extra members:
       </para>
       <itemizedlist>
         <listitem>
         <listitem>
           <simpara>
             The <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">base_types</phrase></computeroutput> member
-            type declared via <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_BASE_TYPES">BOOST_CONTRACT_BASE_TYPES</link></computeroutput>
+            <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">typedef</phrase></computeroutput> declared via <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_BASE_TYPES">BOOST_CONTRACT_BASE_TYPES</link></computeroutput>
             (used to implement subcontracting, see <link linkend="boost_contract.tutorial.public_function_overrides__subcontracting_">Public
             Function Overrides</link>).
           </simpara>
           <simpara>
             The <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">override_</phrase><phrase role="special">...</phrase></computeroutput>
             member types declared via <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OVERRIDE">BOOST_CONTRACT_OVERRIDE</link></computeroutput>,
-            <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123869781472">BOOST_CONTRACT_NAMED_OVERRIDE</link></computeroutput>,
+            <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394998912688">BOOST_CONTRACT_NAMED_OVERRIDE</link></computeroutput>,
             and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OVERRIDES">BOOST_CONTRACT_OVERRIDES</link></computeroutput>
             (used to implement subcontracting for overriding functions, see <link linkend="boost_contract.tutorial.public_function_overrides__subcontracting_">Public
             Function Overrides</link>). <footnote id="boost_contract.advanced.access_specifiers.f0">
             <para>
-              <emphasis role="bold">Rationale:</emphasis> The internals of the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">override_</phrase><phrase role="special">...</phrase></computeroutput>
+              <emphasis role="bold">Rationale:</emphasis> Note that the internals
+              of the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">override_</phrase><phrase role="special">...</phrase></computeroutput>
               type generated by <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OVERRIDE">BOOST_CONTRACT_OVERRIDE</link></computeroutput>
               use names reserved by this library so programmers should not actually
               use such a type even when it is declared <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">public</phrase></computeroutput>.
           to be declared <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">public</phrase></computeroutput> on MSVC,
           but not on GCC and Clang; The <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">override_</phrase><phrase role="special">...</phrase></computeroutput> member types do not have to be declared
           <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">public</phrase></computeroutput> on any compiler. In
-          any case, declaring the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.access">boost::contract::access</link></computeroutput>
-          class <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">friend</phrase></computeroutput> as shown in this
-          section allows to always declare the extra members <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">private</phrase></computeroutput>
-          on all compilers.
+          any case, declaring these extra members all <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">public</phrase></computeroutput>
+          or all <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">private</phrase></computeroutput> when the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.access">boost::contract::access</link></computeroutput> class
+          is also declared <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">friend</phrase></computeroutput> always
+          works on all compilers.
         </para>
         </footnote> However, programmers might need to more precisely control the
         public members of their classes to prevent incorrect access of encapsulated
 <phrase role="keyword">class</phrase> <phrase role="identifier">vector</phrase>
     <phrase role="preprocessor">#define</phrase> <phrase role="identifier">BASES</phrase> <phrase role="keyword">public</phrase> <phrase role="identifier">pushable</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">T</phrase><phrase role="special">&gt;</phrase>
     <phrase role="special">:</phrase> <phrase role="identifier">BASES</phrase>
-<phrase role="special">{</phrase>
+<phrase role="special">{</phrase> <phrase role="comment">// Private section of the class.</phrase>
     <phrase role="keyword">friend</phrase> <phrase role="keyword">class</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">access</phrase><phrase role="special">;</phrase> <phrase role="comment">// Friend `access` class so...</phrase>
 
     <phrase role="keyword">typedef</phrase> <phrase role="identifier">BOOST_CONTRACT_BASE_TYPES</phrase><phrase role="special">(</phrase><phrase role="identifier">BASES</phrase><phrase role="special">)</phrase> <phrase role="identifier">base_types</phrase><phrase role="special">;</phrase> <phrase role="comment">// ...private bases.</phrase>
 
     <phrase role="identifier">BOOST_CONTRACT_OVERRIDE</phrase><phrase role="special">(</phrase><phrase role="identifier">push_back</phrase><phrase role="special">)</phrase> <phrase role="comment">// ...private overrides.</phrase>
 
-<phrase role="keyword">public</phrase><phrase role="special">:</phrase>
+<phrase role="keyword">public</phrase><phrase role="special">:</phrase> <phrase role="comment">// Public section of the class.</phrase>
     <phrase role="keyword">void</phrase> <phrase role="identifier">push_back</phrase><phrase role="special">(</phrase><phrase role="identifier">T</phrase> <phrase role="keyword">const</phrase><phrase role="special">&amp;</phrase> <phrase role="identifier">value</phrase><phrase role="special">,</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">virtual_</phrase><phrase role="special">*</phrase> <phrase role="identifier">v</phrase> <phrase role="special">=</phrase> <phrase role="number">0</phrase><phrase role="special">)</phrase>
             <phrase role="comment">/* override */</phrase> <phrase role="special">{</phrase>
         <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">old_ptr</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">unsigned</phrase><phrase role="special">&gt;</phrase> <phrase role="identifier">old_size</phrase> <phrase role="special">=</phrase>
       </para>
       <para>
         This technique is not used in most examples of this documentation only for
-        brevity, but programmers are encouraged to use it in real code.
+        brevity. Programmers are encouraged to use <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.access">boost::contract::access</link></computeroutput>
+        in real production code freely as they see fit.
       </para>
       <warning>
         <para>
         </listitem>
         <listitem>
           <simpara>
-            Old value copies at body: Exceptions thrown from old value copies at
+            Old values copied at body: Exceptions thrown from old values copied at
             body within <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">.</phrase><phrase role="identifier">old</phrase><phrase role="special">(...)</phrase></computeroutput> call <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.old_failure">boost::contract::old_failure</link></computeroutput>.
           </simpara>
         </listitem>
           <emphasis role="bold">Rationale:</emphasis> In general, when a contract
           fails the only safe thing to do is to terminate program execution (because
           the contract failure indicates a bug in the program, and in general a buggy
-          program will be in a state for which no operation can be successfully performed,
-          so the program should be stopped as soon as possible). Therefore, this
-          library terminates the program by default. However, for specific applications,
-          programmers could implement some fail-safe mechanism for which some mission-critical
-          operation could always be performed upon handling failures so this library
-          allows programmers to override the default contract failure handlers to
-          fully customize how to handle contract failures.
+          program will be in a state for which no operation can be successfully and
+          safely performed, so the program should be stopped as soon as possible).
+          Therefore, this library terminates the program by default. However, for
+          specific applications, programmers could implement some fail-safe mechanism
+          for which some mission-critical operations could always be performed upon
+          handling failures so this library allows programmers to override the default
+          contract failure handlers to fully customize how to handle contract failures.
         </para>
         </footnote> However, programmers can override the default contract failure
         handlers to perform any custom action on contract failure using the following
         </listitem>
         <listitem>
           <simpara>
-            Class invariants: <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.set_entr_idm45123870191120">boost::contract::set_entry_invariant_failure</link></computeroutput>
+            Class invariants: <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.set_entr_idm45394999333872">boost::contract::set_entry_invariant_failure</link></computeroutput>
             and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.set_exit_invariant_failure">boost::contract::set_exit_invariant_failure</link></computeroutput>,
             or <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.set_invariant_failure">boost::contract::set_invariant_failure</link></computeroutput>
             (to set both entry and exit invariant failure handlers at once for convenience).
         </listitem>
         <listitem>
           <simpara>
-            Old value copies at body: <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.set_old_failure">boost::contract::set_old_failure</link></computeroutput>.
+            Old values copied at body: <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.set_old_failure">boost::contract::set_old_failure</link></computeroutput>.
           </simpara>
         </listitem>
         <listitem>
         </listitem>
       </itemizedlist>
       <para>
-        These <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">set_</phrase><phrase role="special">...</phrase><phrase role="identifier">_failure</phrase><phrase role="special">(</phrase></computeroutput><literal moreinfo="none"><emphasis>f</emphasis></literal><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">)</phrase></computeroutput> function calls return the contract failure
-        handler functor <literal moreinfo="none"><emphasis>f</emphasis></literal> that they take
-        as input parameter. <footnote id="boost_contract.advanced.throw_on_failures__and__noexcept__.f1">
+        These <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">set_</phrase><phrase role="special">...</phrase><phrase role="identifier">_failure</phrase><phrase role="special">(</phrase></computeroutput><literal moreinfo="none"><emphasis>f</emphasis></literal><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">)</phrase></computeroutput> function calls return a reference to the
+        contract failure handler functor <literal moreinfo="none"><emphasis>f</emphasis></literal>
+        that they take as input parameter (so they can be concatenated). <footnote id="boost_contract.advanced.throw_on_failures__and__noexcept__.f1">
         <para>
           <emphasis role="bold">Rationale:</emphasis> The <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">set_</phrase><phrase role="special">...</phrase><phrase role="identifier">_failure</phrase></computeroutput>
           functions take a functor as parameter (to accept not just function pointers
         <phrase role="special">}</phrase>
     <phrase role="special">))));</phrase>
     <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">set_except_failure</phrase><phrase role="special">(</phrase>
-        <phrase role="special">[]</phrase> <phrase role="special">(</phrase><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">from</phrase> <phrase role="identifier">where</phrase><phrase role="special">)</phrase> <phrase role="special">{</phrase>
+        <phrase role="special">[]</phrase> <phrase role="special">(</phrase><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">from</phrase><phrase role="special">)</phrase> <phrase role="special">{</phrase>
             <phrase role="comment">// Already an active exception so shall not throw another...</phrase>
             <phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">clog</phrase> <phrase role="special">&lt;&lt;</phrase> <phrase role="string">"ignored exception guarantee failure"</phrase> <phrase role="special">&lt;&lt;</phrase> <phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">endl</phrase><phrase role="special">;</phrase>
         <phrase role="special">}</phrase>
             never throw (in fact destructors are implicitly declared <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">noexcept</phrase></computeroutput> since C++11). This library passes
             a <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.from">boost::contract::from</link></computeroutput>
             parameter to the contract failure handlers for preconditions, postconditions,
-            class invariants, and old value copies at body (see <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.precondition_failure">boost::contract::precondition_failure</link></computeroutput>,
+            class invariants, and old values copied at body (see <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.precondition_failure">boost::contract::precondition_failure</link></computeroutput>,
             <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.postcondition_failure">boost::contract::postcondition_failure</link></computeroutput>,
             <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.entry_invariant_failure">boost::contract::entry_invariant_failure</link></computeroutput>,
             <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.exit_invariant_failure">boost::contract::exit_invariant_failure</link></computeroutput>,
             constructor, or function call so programmers can use it to code custom
             contract failure hander functions that never throw from destructors.
             (In the example above, contract failures from destructors are simply
-            ignored even if that is probably never a safe thing to do in real code.)
+            ignored even if that is probably never a safe thing to do in real production
+            code.)
           </simpara>
         </listitem>
         <listitem>
         </listitem>
         <listitem>
           <simpara>
+            The contract failure handler for exception guarantees <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.except_failure">boost::contract::except_failure</link></computeroutput>
+            should never throw (regardless of the value of its <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.from">boost::contract::from</link></computeroutput>
+            parameter) because when <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.except_failure">boost::contract::except_failure</link></computeroutput>
+            is called there is already an active exception on the stack, the exception
+            that triggered the exception guarantees to be checked in the first place
+            (throwing an exception while there is already an active exception will
+            force program termination or lead to undefined behaviour in C++).
+          </simpara>
+        </listitem>
+        <listitem>
+          <simpara>
             Implementation checks can appear in any code, including destructor implementation
             code, so <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.check_failure">boost::contract::check_failure</link></computeroutput>
             should also never throw, or implementation checks should never be used
             code).
           </simpara>
         </listitem>
-        <listitem>
-          <simpara>
-            The contract failure handler for exception guarantees <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.except_failure">boost::contract::except_failure</link></computeroutput>
-            should never throw (regardless of the value of its <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.from">boost::contract::from</link></computeroutput>
-            parameter) because when <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.except_failure">boost::contract::except_failure</link></computeroutput>
-            is called there is already an active exception on the stack, the exception
-            that triggered the exception guarantees to be checked in the first place
-            (throwing an exception while there is already an active exception will
-            force program termination or lead to undefined behaviour in C++).
-          </simpara>
-        </listitem>
       </itemizedlist>
       <note>
         <para>
-          It is the responsibility of the programmers to decide how to handle contract
-          failures from destructors when they program custom contract failure handlers
-          that throw exceptions instead of terminating the program (given that C++
-          and STL exception safety rules requires destructors to never throw). This
-          is not a simple dilemma and it might be a good reason to terminate the
-          program instead of throwing exceptions when assertions fail in C++ (as
-          this library and also C-style <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">assert</phrase></computeroutput>
-          do by default).
+          Programmers need to decide how to handle contract failures from destructors
+          when they write custom contract failure handlers that throw exceptions
+          instead of terminating the program (given that C++ and STL exception safety
+          rules requires destructors to never throw). This is not a simple dilemma
+          and it might be a good reason to terminate the program instead of throwing
+          exceptions when assertions fail in C++ (as this library and also C-style
+          <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">assert</phrase></computeroutput> do by default).
         </para>
       </note>
+      <bridgehead renderas="sect4" id="boost_contract.advanced.throw_on_failures__and__noexcept__.h0">
+        <phrase id="boost_contract.advanced.throw_on_failures__and__noexcept__.throw_user_defined_exceptions"/><link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__.throw_user_defined_exceptions">Throw
+        User-Defined Exceptions</link>
+      </bridgehead>
       <para>
         Contract assertions can be programmed to throw <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.assertion_failure">boost::contract::assertion_failure</link></computeroutput>
         using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase></computeroutput><literal moreinfo="none"><emphasis>condition</emphasis></literal><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">)</phrase></computeroutput> as we have seen so far (see <link linkend="boost_contract.extras.no_macros__and_no_variadic_macros_">No
 <programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase><phrase role="special">(!</phrase><literal moreinfo="none"><emphasis>condition</emphasis></literal><phrase role="special">)</phrase> <phrase role="keyword">throw</phrase> <literal moreinfo="none"><emphasis>exception-object</emphasis></literal><phrase role="special">;</phrase>
 </programlisting>
       <para>
-        For example, the following precondition functor throws <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude">boost::contract:assertion_failure</computeroutput>
+        For example, the following precondition functor throws <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.assertion_failure">boost::contract::assertion_failure</link></computeroutput>
         (via <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput>)
         on its first assertion and the user-defined exception <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">too_large_error</phrase></computeroutput>
         on its second assertion (both exceptions will cause this library to call
         the customized <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.precondition_failure">boost::contract::precondition_failure</link></computeroutput>
-        listed above which will in turn re-throw the exceptions up he stack, see
+        listed above which will in turn re-throw the exceptions up the stack, see
         <ulink url="../../example/features/throw_on_failure.cpp"><literal moreinfo="none">throw_on_failure.cpp</literal></ulink>):
       </para>
       <para>
 <phrase role="special">};</phrase>
 </programlisting>
       </para>
+      <bridgehead renderas="sect4" id="boost_contract.advanced.throw_on_failures__and__noexcept__.h1">
+        <phrase id="boost_contract.advanced.throw_on_failures__and__noexcept__.exception_specifiers___code__phrase_role__keyword__noexcept__phrase___code__and__code__phrase_role__keyword__throw__phrase___code___"/><link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__.exception_specifiers___code__phrase_role__keyword__noexcept__phrase___code__and__code__phrase_role__keyword__throw__phrase___code___">Exception
+        Specifiers (<computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">noexcept</phrase></computeroutput> and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">throw</phrase></computeroutput>`)</link>
+      </bridgehead>
       <para>
-        Finally, note that the exception specifiers <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">noexcept</phrase></computeroutput>
+        Exception specifiers <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">noexcept</phrase></computeroutput>
         (since C++11) and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">throw</phrase></computeroutput> (deprecated
-        in C++11) of the enclosing operation declaring the contract correctly apply
-        to the contract code as well. Therefore, even if the contract failure handlers
-        are reprogrammed to throw exceptions in case of contract failures, those
-        exceptions will never be thrown outside the context of the enclosing operation
-        if that is not in accordance with the exception specifiers of that operation
-        (specifically, note that all destructors are implicitly declared <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">noexcept</phrase></computeroutput> in C++11). For example, the following
-        code will correctly never throw from the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">noexcept</phrase></computeroutput>
-        destructor, not even if the class invariants checked at destructor entry
-        throw <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">too_large_error</phrase></computeroutput> and
-        the contract failure handlers for invariants are programmed to throw from
-        destructors (the program will always terminate in this case instead, see
-        <ulink url="../../example/features/throw_on_failure.cpp"><literal moreinfo="none">throw_on_failure.cpp</literal></ulink>):
+        in C++11) of the enclosing function, constructor, or destructor declaring
+        the contract correctly apply to the contract code as well. Therefore, even
+        if the contract failure handlers are reprogrammed to throw exceptions in
+        case of contract failures, those exceptions will never be thrown outside
+        the context of the enclosing operation if that is not in accordance with
+        the exception specifiers of that operation (specifically, note that all destructors
+        are implicitly declared <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">noexcept</phrase></computeroutput>
+        in C++11).
+      </para>
+      <para>
+        For example, the following code will correctly never throw from the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">noexcept</phrase></computeroutput> destructor, not even if the class
+        invariants checked at destructor entry throw <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">too_large_error</phrase></computeroutput>
+        and the contract failure handlers for invariants are programmed to throw
+        from destructors (the program will always terminate in this case instead,
+        see <ulink url="../../example/features/throw_on_failure.cpp"><literal moreinfo="none">throw_on_failure.cpp</literal></ulink>):
       </para>
       <para>
 <programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">struct</phrase> <phrase role="identifier">too_large_error</phrase> <phrase role="special">{};</phrase>
         and checking if the old value pointer is not null before dereferencing it
         in postconditions. For example, consider the following function template
         that could in general be instantiated for types <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">T</phrase></computeroutput>
-        that are not copy constructible (that is for which <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">is_old_value_copyable</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">T</phrase><phrase role="special">&gt;::</phrase><phrase role="identifier">value</phrase></computeroutput> is <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">false</phrase></computeroutput>,
+        that are not copy constructible (that is for which <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.is_old_value_copyable">boost::contract::is_old_value_copyable</link></computeroutput><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">&lt;</phrase><phrase role="identifier">T</phrase><phrase role="special">&gt;::</phrase><phrase role="identifier">value</phrase></computeroutput> is <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">false</phrase></computeroutput>,
         see <ulink url="../../example/features/old_if_copyable.cpp"><literal moreinfo="none">old_if_copyable.cpp</literal></ulink>):
         <footnote id="boost_contract.extras.old_value_requirements__templates_.f0">
         <para>
           constructible. However, this library provides such a mechanism to allow
           to program contracts for template code without necessarily adding extra
           copy constructible type requirements that would not be present if it were
-          not for copying the old values (so compiling the code with and without
-          contracts will not necessarily alter the type requirements of the program).
-          Something similar could be achieved combing C++17 <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase>
+          not for copying old values (so compiling the code with and without contracts
+          will not necessarily alter the type requirements of the program). Something
+          similar could be achieved combing C++17 <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase>
           <phrase role="keyword">constexpr</phrase></computeroutput> with <link linkend="N1962_anchor">[N1962]</link>
           or <link linkend="P0380_anchor">[P0380]</link> so that old value expressions
-          within template code could be guarded by <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase>
+          within template code can be guarded by <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase>
           <phrase role="keyword">constexpr</phrase></computeroutput> statements checking if
           the old value types are copyable or not. For example, assuming old values
-          are added to <link linkend="P0380_anchor">[P0380]</link> (using the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">oldof</phrase><phrase role="special">(...)</phrase></computeroutput>
+          are added to <link linkend="P0380_anchor">[P0380]</link> (using some kind
+          of <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">oldof</phrase><phrase role="special">(...)</phrase></computeroutput>
           syntax) and that C++17 <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase> <phrase role="keyword">constexpr</phrase></computeroutput> can be used within <link linkend="P0380_anchor">[P0380]</link>
           contracts:
 <programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> <phrase role="identifier">T</phrase><phrase role="special">&gt;</phrase>
       <para>
         The old value pointer <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">old_x</phrase></computeroutput>
         is programmed using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.old_ptr_if_copyable">boost::contract::old_ptr_if_copyable</link></computeroutput>.
-        When <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">T</phrase></computeroutput> is copyable, this
-        <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">old_ptr_if_copyable</phrase><phrase role="special">]&lt;</phrase><phrase role="identifier">T</phrase><phrase role="special">&gt;</phrase></computeroutput> behaves
-        like <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">old_ptr</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">T</phrase><phrase role="special">&gt;</phrase></computeroutput>.
+        When <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">T</phrase></computeroutput> is copyable, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.old_ptr_if_copyable">boost::contract::old_ptr_if_copyable</link></computeroutput><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">&lt;</phrase><phrase role="identifier">T</phrase><phrase role="special">&gt;</phrase></computeroutput>
+        behaves like <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.old_ptr">boost::contract::old_ptr</link></computeroutput><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">&lt;</phrase><phrase role="identifier">T</phrase><phrase role="special">&gt;</phrase></computeroutput>.
         When <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">T</phrase></computeroutput> is not copyable instead,
-        <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">old_ptr_if_copyable</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">T</phrase><phrase role="special">&gt;</phrase></computeroutput> will
-        simply not copy <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">x</phrase></computeroutput> at run-time
-        and leave <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">old_x</phrase></computeroutput> initialized
-        as a null pointer. Therefore, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.old_ptr_if_copyable">boost::contract::old_ptr_if_copyable</link></computeroutput>
+        <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.old_ptr_if_copyable">boost::contract::old_ptr_if_copyable</link></computeroutput><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">&lt;</phrase><phrase role="identifier">T</phrase><phrase role="special">&gt;</phrase></computeroutput>
+        will simply not copy <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">x</phrase></computeroutput> at
+        run-time and leave <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">old_x</phrase></computeroutput>
+        initialized to a null pointer. Therefore, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.old_ptr_if_copyable">boost::contract::old_ptr_if_copyable</link></computeroutput>
         objects like <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">old_x</phrase></computeroutput> must be
         checked to be not null as in <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase><phrase role="special">(</phrase><phrase role="identifier">old_x</phrase><phrase role="special">)</phrase> <phrase role="special">...</phrase></computeroutput> before
-        they are dereferenced in postconditions and exception guarantees.
+        they are dereferenced in postconditions and exception guarantees (to avoid
+        run-time errors of dereferencing null pointers).
       </para>
       <para>
         If the above example used <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.old_ptr">boost::contract::old_ptr</link></computeroutput>
         <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">offset</phrase></computeroutput> is instantiated with
         types <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">T</phrase></computeroutput> that are not copy
         constructible (but only if <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">old_x</phrase></computeroutput>
-        is actually dereferenced somewhere in the contract assertions using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">*</phrase><phrase role="identifier">old_x</phrase> <phrase role="special">...</phrase></computeroutput>, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">old_x</phrase><phrase role="special">-&gt;...</phrase></computeroutput>, etc.).
+        is actually dereferenced somewhere, for example in the contract assertions
+        using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">*</phrase><phrase role="identifier">old_x</phrase>
+        <phrase role="special">...</phrase></computeroutput> or <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">old_x</phrase><phrase role="special">-&gt;...</phrase></computeroutput>). <footnote id="boost_contract.extras.old_value_requirements__templates_.f1">
+        <para>
+          Technically, on C++17 it is possible to use <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.old_ptr">boost::contract::old_ptr</link></computeroutput>
+          together with <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase> <phrase role="keyword">constexpr</phrase></computeroutput>
+          instead of using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.old_ptr_if_copyable">boost::contract::old_ptr_if_copyable</link></computeroutput>,
+          for example:
+<programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> <phrase role="identifier">T</phrase><phrase role="special">&gt;</phrase>
+<phrase role="keyword">void</phrase> <phrase role="identifier">offset</phrase><phrase role="special">(</phrase><phrase role="identifier">T</phrase><phrase role="special">&amp;</phrase> <phrase role="identifier">x</phrase><phrase role="special">,</phrase> <phrase role="keyword">int</phrase> <phrase role="identifier">count</phrase><phrase role="special">)</phrase> <phrase role="special">{</phrase>
+    <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">old_ptr</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">T</phrase><phrase role="special">&gt;</phrase> <phrase role="identifier">old_x</phrase><phrase role="special">;</phrase>
+    <phrase role="keyword">if</phrase> <phrase role="keyword">constexpr</phrase><phrase role="special">(</phrase><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">is_old_value_copyable</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">T</phrase><phrase role="special">&gt;::</phrase><phrase role="identifier">value</phrase><phrase role="special">)</phrase> <phrase role="identifier">old_x</phrase> <phrase role="special">=</phrase> <phrase role="identifier">BOOST_CONTRACT_OLDOF</phrase><phrase role="special">(</phrase><phrase role="identifier">x</phrase><phrase role="special">);</phrase>
+    <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">check</phrase> <phrase role="identifier">c</phrase> <phrase role="special">=</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">function</phrase><phrase role="special">()</phrase>
+        <phrase role="special">.</phrase><phrase role="identifier">postcondition</phrase><phrase role="special">([&amp;]</phrase> <phrase role="special">{</phrase>
+            <phrase role="keyword">if</phrase> <phrase role="keyword">constexpr</phrase><phrase role="special">(</phrase><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">is_old_value_copyable</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">T</phrase><phrase role="special">&gt;::</phrase><phrase role="identifier">value</phrase><phrase role="special">)</phrase> <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">x</phrase> <phrase role="special">==</phrase> <phrase role="special">*</phrase><phrase role="identifier">old_x</phrase> <phrase role="special">+</phrase> <phrase role="identifier">count</phrase><phrase role="special">);</phrase>
+        <phrase role="special">})</phrase>
+    <phrase role="special">;</phrase>
+
+    <phrase role="identifier">x</phrase> <phrase role="special">+=</phrase> <phrase role="identifier">count</phrase><phrase role="special">;</phrase>
+<phrase role="special">}</phrase>
+</programlisting>
+          However, the authors find this code less readable and more verbose than
+          its equivalent that uses <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.old_ptr_if_copyable">boost::contract::old_ptr_if_copyable</link></computeroutput>.
+          Guarding old value copies and related assertions with <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase>
+          <phrase role="keyword">constexpr</phrase></computeroutput> is useful instead when
+          the guard condition checks type requirements more complex than just <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.is_old_value_copyable">boost::contract::is_old_value_copyable</link></computeroutput>
+          (as shown later in this documentation).
+        </para>
+        </footnote>
       </para>
       <para>
         When C++11 <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">auto</phrase></computeroutput> declarations
         are used with <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OLDOF">BOOST_CONTRACT_OLDOF</link></computeroutput>,
         this library always defaults to using the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.old_ptr">boost::contract::old_ptr</link></computeroutput>
         type (because its type requirements are more stringent than <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.old_ptr_if_copyable">boost::contract::old_ptr_if_copyable</link></computeroutput>).
-        If programmers want to relax the copyable type requirement, they must do
-        so explicitly by using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.old_ptr_if_copyable">boost::contract::old_ptr_if_copyable</link></computeroutput>
-        instead of using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">auto</phrase></computeroutput>. For example,
-        the following statements are equivalent:
+        For example, the following statements are equivalent:
       </para>
 <programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">auto</phrase> <phrase role="identifier">old_x</phrase> <phrase role="special">=</phrase> <phrase role="identifier">BOOST_CONTRACT_OLDOF</phrase><phrase role="special">(</phrase><phrase role="identifier">x</phrase><phrase role="special">);</phrase> <phrase role="comment">// C++11 auto declarations always use `old_ptr` (never `old_ptr_if_copyable`).</phrase>
 <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">old_ptr</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">decltype</phrase><phrase role="special">(</phrase><phrase role="identifier">x</phrase><phrase role="special">)&gt;</phrase> <phrase role="identifier">old_x</phrase> <phrase role="special">=</phrase> <phrase role="identifier">BOOST_CONTRACT_OLDOF</phrase><phrase role="special">(</phrase><phrase role="identifier">x</phrase><phrase role="special">);</phrase>
 </programlisting>
       <para>
+        If programmers want to relax the copyable type requirement, they must do
+        so explicitly by using the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.old_ptr_if_copyable">boost::contract::old_ptr_if_copyable</link></computeroutput>
+        type instead of using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">auto</phrase></computeroutput> declarations.
+      </para>
+      <bridgehead renderas="sect4" id="boost_contract.extras.old_value_requirements__templates_.h0">
+        <phrase id="boost_contract.extras.old_value_requirements__templates_.old_value_type_traits"/><link linkend="boost_contract.extras.old_value_requirements__templates_.old_value_type_traits">Old
+        Value Type Traits</link>
+      </bridgehead>
+      <para>
         This library uses <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.is_old_value_copyable">boost::contract::is_old_value_copyable</link></computeroutput>
         to determine if an old value type is copyable or not, and then <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.old_value_copy">boost::contract::old_value_copy</link></computeroutput>
-        to actually copy the old value. By default, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">is_old_value_copyable</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">T</phrase><phrase role="special">&gt;</phrase></computeroutput>
+        to actually copy the old value.
+      </para>
+      <para>
+        By default, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.is_old_value_copyable">boost::contract::is_old_value_copyable</link></computeroutput><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">&lt;</phrase><phrase role="identifier">T</phrase><phrase role="special">&gt;</phrase></computeroutput>
         is equivalent to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">is_copy_constructible</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">T</phrase><phrase role="special">&gt;</phrase></computeroutput> and
-        <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">old_value_copy</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">T</phrase><phrase role="special">&gt;</phrase></computeroutput> is
-        implemented using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">T</phrase></computeroutput>'s copy
-        constructor. However, these type traits can be specialized by programmers
+        <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.old_value_copy">boost::contract::old_value_copy</link></computeroutput><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">&lt;</phrase><phrase role="identifier">T</phrase><phrase role="special">&gt;</phrase></computeroutput>
+        is implemented using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">T</phrase></computeroutput>'s
+        copy constructor. However, these type traits can be specialized by programmers
         for example to avoid making old value copies of types even when they have
         a copy constructor (maybe because these copy constructors are too expensive),
         or to make old value copies for types that do not have a copy constructor,
         or for any other specific need programmers might have for the types in question.
+      </para>
+      <para>
         For example, the following specialization of <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.is_old_value_copyable">boost::contract::is_old_value_copyable</link></computeroutput>
         intentionally avoids making old value copies for all expressions of type
         <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">w</phrase></computeroutput> even if that type has a
 <programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="comment">// Copyable type but...</phrase>
 <phrase role="keyword">class</phrase> <phrase role="identifier">w</phrase> <phrase role="special">{</phrase>
 <phrase role="keyword">public</phrase><phrase role="special">:</phrase>
-    <phrase role="identifier">w</phrase><phrase role="special">(</phrase><phrase role="identifier">w</phrase> <phrase role="keyword">const</phrase><phrase role="special">&amp;)</phrase> <phrase role="special">{</phrase> <phrase role="comment">/* Some very expensive copy here operation here... */</phrase> <phrase role="special">}</phrase>
+    <phrase role="identifier">w</phrase><phrase role="special">(</phrase><phrase role="identifier">w</phrase> <phrase role="keyword">const</phrase><phrase role="special">&amp;)</phrase> <phrase role="special">{</phrase> <phrase role="comment">/* Some very expensive copy operation here... */</phrase> <phrase role="special">}</phrase>
 
     <phrase role="comment">/* ... */</phrase>
 </programlisting>
 <phrase role="special">}</phrase> <phrase role="special">}</phrase>
 </programlisting>
       </para>
-      <bridgehead renderas="sect4" id="boost_contract.extras.old_value_requirements__templates_.h0">
-        <phrase id="boost_contract.extras.old_value_requirements__templates_.no_c__11"/><link linkend="boost_contract.extras.old_value_requirements__templates_.no_c__11">No
-        C++11</link>
-      </bridgehead>
       <para>
         In general, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">is_copy_constructible</phrase></computeroutput> and therefore <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.is_old_value_copyable">boost::contract::is_old_value_copyable</link></computeroutput>
         require C++11 <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">decltype</phrase></computeroutput> and SFINAE
-        to automatically detect if a given type is not copyable. On non-C++11 compilers,
-        it is possible to inherit the old value type from <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">noncopyable</phrase></computeroutput>,
-        or use <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_MOVABLE_BUT_NOT_COPYABLE</phrase></computeroutput>,
+        to automatically detect if a given type is copyable or not. On non-C++11
+        compilers, it is possible to inherit the old value type from <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">noncopyable</phrase></computeroutput>, or use <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_MOVABLE_BUT_NOT_COPYABLE</phrase></computeroutput>,
         or specialize <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">is_copy_constructible</phrase></computeroutput> (see <ulink url="http://www.boost.org/doc/libs/release/libs/type_traits/doc/html/boost_typetraits/reference/is_copy_constructible.html"><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">is_copy_constructible</phrase></computeroutput></ulink> documentation
-        for more information). Alternatively, it is possible to just specialize
-        <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.is_old_value_copyable">boost::contract::is_old_value_copyable</link></computeroutput>.
+        for more information), or just specialize <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.is_old_value_copyable">boost::contract::is_old_value_copyable</link></computeroutput>.
         For example, for a non-copyable type <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">n</phrase></computeroutput>
-        (see <ulink url="../../example/features/old_if_copyable.cpp"><literal moreinfo="none">old_if_copyable.cpp</literal></ulink>):
+        the following code will work also on non-C++11 compilers (see <ulink url="../../example/features/old_if_copyable.cpp"><literal moreinfo="none">old_if_copyable.cpp</literal></ulink>):
       </para>
       <para>
 <programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">class</phrase> <phrase role="identifier">n</phrase> <phrase role="special">{</phrase> <phrase role="comment">// Do not want to use boost::noncopyable but...</phrase>
       </para>
       <para>
         However, in some other cases it might be desirable to not augment the type
-        requirements of a program because of contract assertions and to simply skip
-        these assertions when user types do not provide all the operations necessary
+        requirements of a program just because of contract assertions and to simply
+        skip assertions when user types do not provide all the operations necessary
         to check them, without causing compile-time errors. Programmers can do this
-        using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.condition_if">boost::contract::condition_if</link></computeroutput>
-        (or <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.condition_if_c">boost::contract::condition_if_c</link></computeroutput>).
+        using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase> <phrase role="keyword">constexpr</phrase></computeroutput>
+        on C++17 compilers, and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.condition_if">boost::contract::condition_if</link></computeroutput>
+        (or <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.condition_if_c">boost::contract::condition_if_c</link></computeroutput>)
+        on non-C++17 compilers.
       </para>
       <para>
         For example, let's consider the following <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">vector</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">T</phrase><phrase role="special">&gt;</phrase></computeroutput>
         users instantiate <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">vector</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">T</phrase><phrase role="special">&gt;</phrase></computeroutput>
         with a type <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">T</phrase></computeroutput> that does not
         provide an equality operator <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">==</phrase></computeroutput>.
-        Otherwise, programmers can specify this postcondition using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.condition_if">boost::contract::condition_if</link></computeroutput>
+        Otherwise, programmers can guard this postcondition using C++17 <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase> <phrase role="keyword">constexpr</phrase></computeroutput>
         to evaluate the asserted condition only for types <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">T</phrase></computeroutput>
         that have an equality operator <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">==</phrase></computeroutput>
-        (and trivially evaluate to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">true</phrase></computeroutput>
-        otherwise). On C++17 compilers, the same can be achieved using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase> <phrase role="keyword">constexpr</phrase></computeroutput>
-        instead of <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.condition_if">boost::contract::condition_if</link></computeroutput>
-        resulting in a more concise and readable syntax. <footnote id="boost_contract.extras.assertion_requirements__templates_.f0">
+        and skip it otherwise. <footnote id="boost_contract.extras.assertion_requirements__templates_.f0">
         <para>
           <emphasis role="bold">Rationale:</emphasis> <link linkend="N1962_anchor">[N1962]</link>
           and other proposals to add contracts to C++ do not provide a mechanism
           this library provides such a mechanism to allow to program contracts for
           template code without necessarily adding extra type requirements that would
           not be present if it was not for the contracts (so compiling the code with
-          and without contracts will not necessarily alter the type requirements
-          of the program). Something similar could be achieved combing C++17 <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase> <phrase role="keyword">constexpr</phrase></computeroutput>
-          with <link linkend="N1962_anchor">[N1962]</link> or <link linkend="P0380_anchor">[P0380]</link>
-          so that contract assertions within template code could be guarded by <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase> <phrase role="keyword">constexpr</phrase></computeroutput>
-          statements checking related type requirements (<link linkend="N1962_anchor">[N1962]</link>
-          already supports <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase></computeroutput> statements
-          under the name of <emphasis>select assertions</emphasis>, <link linkend="P0380_anchor">[P0380]</link>
-          does not so probably <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase></computeroutput> statements
-          should be added to <link linkend="P0380_anchor">[P0380]</link> as well).
-          For example, assuming old values are added to <link linkend="P0380_anchor">[P0380]</link>
-          (using the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">oldof</phrase><phrase role="special">(...)</phrase></computeroutput>
-          syntax) and that C++17 <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase> <phrase role="keyword">constexpr</phrase></computeroutput> can be used within <link linkend="P0380_anchor">[P0380]</link>
-          contracts:
+          and without contracts will not alter the type requirements of the program).
+          Something similar could be achieved combing C++17 <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase>
+          <phrase role="keyword">constexpr</phrase></computeroutput> with <link linkend="N1962_anchor">[N1962]</link>
+          or <link linkend="P0380_anchor">[P0380]</link> so that contract assertions
+          within template code could be guarded by <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase>
+          <phrase role="keyword">constexpr</phrase></computeroutput> statements checking the
+          related type requirements (<link linkend="N1962_anchor">[N1962]</link>
+          already allows of <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase></computeroutput> statements
+          in contracts under the name of <emphasis>select assertions</emphasis>,
+          <link linkend="P0380_anchor">[P0380]</link> does not so probably <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase></computeroutput> statements should be added to <link linkend="P0380_anchor">[P0380]</link>
+          as well). For example, assuming C++17 <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase>
+          <phrase role="keyword">constexpr</phrase></computeroutput> can be used within <link linkend="P0380_anchor">[P0380]</link> contracts:
 <programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> <phrase role="identifier">T</phrase><phrase role="special">&gt;</phrase>
 <phrase role="keyword">class</phrase> <phrase role="identifier">vector</phrase> <phrase role="special">{</phrase>
 <phrase role="keyword">public</phrase><phrase role="special">:</phrase>
 <phrase role="special">};</phrase>
 </programlisting>
         </para>
-        </footnote> For example (see <ulink url="../../example/features/condition_if.cpp"><literal moreinfo="none">condition_if.cpp</literal></ulink>):
+        </footnote> For example:
       </para>
-      <informaltable frame="all">
-        <tgroup cols="2">
-          <thead>
-            <row>
-              <entry>
-                <para>
-                  Until C++17 (without <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase>
-                  <phrase role="keyword">constexpr</phrase></computeroutput>)
-                </para>
-              </entry>
-              <entry>
-                <para>
-                  Since C++17 (with <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase> <phrase role="keyword">constexpr</phrase></computeroutput>)
-                </para>
-              </entry>
-            </row>
-          </thead>
-          <tbody>
-            <row>
-              <entry>
-                <para>
 <programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> <phrase role="identifier">T</phrase><phrase role="special">&gt;</phrase>
 <phrase role="keyword">class</phrase> <phrase role="identifier">vector</phrase> <phrase role="special">{</phrase>
 <phrase role="keyword">public</phrase><phrase role="special">:</phrase>
     <phrase role="keyword">void</phrase> <phrase role="identifier">push_back</phrase><phrase role="special">(</phrase><phrase role="identifier">T</phrase> <phrase role="keyword">const</phrase><phrase role="special">&amp;</phrase> <phrase role="identifier">value</phrase><phrase role="special">)</phrase> <phrase role="special">{</phrase>
-        <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">check</phrase> <phrase role="identifier">c</phrase> <phrase role="special">=</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">public_function</phrase><phrase role="special">(</phrase><phrase role="keyword">this</phrase><phrase role="special">)</phrase>
+        <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">check</phrase> <phrase role="identifier">c</phrase> <phrase role="special">=</phrase> <phrase role="identifier">boot</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">public_function</phrase><phrase role="special">(</phrase><phrase role="keyword">this</phrase><phrase role="special">)</phrase>
             <phrase role="special">.</phrase><phrase role="identifier">postcondition</phrase><phrase role="special">([&amp;]</phrase> <phrase role="special">{</phrase>
-                <phrase role="comment">// Instead of `ASSERT(back() == value)` for T without `==`.</phrase>
-                <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase>
-                    <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">condition_if</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">has_equal_to</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">T</phrase><phrase role="special">&gt;</phrase> <phrase role="special">&gt;(</phrase>
-                        <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">bind</phrase><phrase role="special">(</phrase><phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">equal_to</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">T</phrase><phrase role="special">&gt;(),</phrase>
-                            <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">cref</phrase><phrase role="special">(</phrase><phrase role="identifier">back</phrase><phrase role="special">()),</phrase>
-                            <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">cref</phrase><phrase role="special">(</phrase><phrase role="identifier">value</phrase><phrase role="special">)</phrase>
-                        <phrase role="special">)</phrase>
-                    <phrase role="special">)</phrase>
-                <phrase role="special">);</phrase>
+                <phrase role="comment">// Guard with `if constexpr` for T without `==`.</phrase>
+                <phrase role="keyword">if</phrase> <phrase role="keyword">constexpr</phrase><phrase role="special">(</phrase><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">has_equal_to</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">T</phrase><phrase role="special">&gt;::</phrase><phrase role="identifier">value</phrase><phrase role="special">)</phrase>
+                    <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">back</phrase><phrase role="special">()</phrase> <phrase role="special">==</phrase> <phrase role="identifier">value</phrase><phrase role="special">);</phrase>
             <phrase role="special">})</phrase>
         <phrase role="special">;</phrase>
 
 
     <phrase role="comment">/* ... */</phrase>
 </programlisting>
-                </para>
-              </entry>
-              <entry>
-                <para>
+      <para>
+        More in general, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase> <phrase role="keyword">constexpr</phrase></computeroutput>
+        can be used to guard a mix of both old value copies and contract assertions
+        that introduce specific extra type requirements. For example, the following
+        <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">swap</phrase></computeroutput> function can be called
+        on any type <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">T</phrase></computeroutput> that is movable
+        but its old value copies and postcondition assertions are evaluated only
+        for types <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">T</phrase></computeroutput> that are also
+        copyable and have an equality operator <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">==</phrase></computeroutput>
+        (see <ulink url="../../example/features/if_constexpr.cpp"><literal moreinfo="none">if_constexpr.cpp</literal></ulink>):
+      </para>
+      <para>
+<programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> <phrase role="identifier">T</phrase><phrase role="special">&gt;</phrase>
+<phrase role="keyword">void</phrase> <phrase role="identifier">swap</phrase><phrase role="special">(</phrase><phrase role="identifier">T</phrase><phrase role="special">&amp;</phrase> <phrase role="identifier">x</phrase><phrase role="special">,</phrase> <phrase role="identifier">T</phrase><phrase role="special">&amp;</phrase> <phrase role="identifier">y</phrase><phrase role="special">)</phrase> <phrase role="special">{</phrase>
+    <phrase role="keyword">constexpr</phrase> <phrase role="keyword">bool</phrase> <phrase role="identifier">b</phrase> <phrase role="special">=</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">is_old_value_copyable</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">T</phrase><phrase role="special">&gt;::</phrase><phrase role="identifier">value</phrase> <phrase role="special">&amp;&amp;</phrase>
+            <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">has_equal_to</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">T</phrase><phrase role="special">&gt;::</phrase><phrase role="identifier">value</phrase><phrase role="special">;</phrase>
+    <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">old_ptr</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">T</phrase><phrase role="special">&gt;</phrase> <phrase role="identifier">old_x</phrase><phrase role="special">,</phrase> <phrase role="identifier">old_y</phrase><phrase role="special">;</phrase>
+    <phrase role="keyword">if</phrase> <phrase role="keyword">constexpr</phrase><phrase role="special">(</phrase><phrase role="identifier">b</phrase><phrase role="special">)</phrase> <phrase role="special">{</phrase> <phrase role="comment">// Contract requires copyable T...</phrase>
+        <phrase role="identifier">old_x</phrase> <phrase role="special">=</phrase> <phrase role="identifier">BOOST_CONTRACT_OLDOF</phrase><phrase role="special">(</phrase><phrase role="identifier">x</phrase><phrase role="special">);</phrase>
+        <phrase role="identifier">old_y</phrase> <phrase role="special">=</phrase> <phrase role="identifier">BOOST_CONTRACT_OLDOF</phrase><phrase role="special">(</phrase><phrase role="identifier">y</phrase><phrase role="special">);</phrase>
+    <phrase role="special">}</phrase>
+    <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">check</phrase> <phrase role="identifier">c</phrase> <phrase role="special">=</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">function</phrase><phrase role="special">()</phrase>
+        <phrase role="special">.</phrase><phrase role="identifier">postcondition</phrase><phrase role="special">([&amp;]</phrase> <phrase role="special">{</phrase>
+            <phrase role="keyword">if</phrase> <phrase role="keyword">constexpr</phrase><phrase role="special">(</phrase><phrase role="identifier">b</phrase><phrase role="special">)</phrase> <phrase role="special">{</phrase> <phrase role="comment">// ... and T with `==`...</phrase>
+                <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">x</phrase> <phrase role="special">==</phrase> <phrase role="special">*</phrase><phrase role="identifier">old_y</phrase><phrase role="special">);</phrase>
+                <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">y</phrase> <phrase role="special">==</phrase> <phrase role="special">*</phrase><phrase role="identifier">old_x</phrase><phrase role="special">);</phrase>
+            <phrase role="special">}</phrase>
+        <phrase role="special">})</phrase>
+    <phrase role="special">;</phrase>
+
+    <phrase role="identifier">T</phrase> <phrase role="identifier">t</phrase> <phrase role="special">=</phrase> <phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">move</phrase><phrase role="special">(</phrase><phrase role="identifier">x</phrase><phrase role="special">);</phrase> <phrase role="comment">// ...but body only requires movable T.</phrase>
+    <phrase role="identifier">x</phrase> <phrase role="special">=</phrase> <phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">move</phrase><phrase role="special">(</phrase><phrase role="identifier">y</phrase><phrase role="special">);</phrase>
+    <phrase role="identifier">y</phrase> <phrase role="special">=</phrase> <phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">move</phrase><phrase role="special">(</phrase><phrase role="identifier">t</phrase><phrase role="special">);</phrase>
+<phrase role="special">}</phrase>
+</programlisting>
+      </para>
+      <bridgehead renderas="sect4" id="boost_contract.extras.assertion_requirements__templates_.h0">
+        <phrase id="boost_contract.extras.assertion_requirements__templates_.no__code__phrase_role__keyword__if__phrase___phrase_role__keyword__constexpr__phrase___code___no_c__17_"/><link linkend="boost_contract.extras.assertion_requirements__templates_.no__code__phrase_role__keyword__if__phrase___phrase_role__keyword__constexpr__phrase___code___no_c__17_">No
+        <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase> <phrase role="keyword">constexpr</phrase></computeroutput>
+        (no C++17)</link>
+      </bridgehead>
+      <para>
+        On non-C++17 compilers where <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase> <phrase role="keyword">constexpr</phrase></computeroutput> is not available, it is possible
+        to use <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.condition_if">boost::contract::condition_if</link></computeroutput>
+        to skip assertions based on type requirements (even if this code is less
+        readable and more verbose than using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase>
+        <phrase role="keyword">constexpr</phrase></computeroutput>). For example (see <ulink url="../../example/features/condition_if.cpp"><literal moreinfo="none">condition_if.cpp</literal></ulink>):
+      </para>
+      <para>
 <programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> <phrase role="identifier">T</phrase><phrase role="special">&gt;</phrase>
 <phrase role="keyword">class</phrase> <phrase role="identifier">vector</phrase> <phrase role="special">{</phrase>
 <phrase role="keyword">public</phrase><phrase role="special">:</phrase>
     <phrase role="keyword">void</phrase> <phrase role="identifier">push_back</phrase><phrase role="special">(</phrase><phrase role="identifier">T</phrase> <phrase role="keyword">const</phrase><phrase role="special">&amp;</phrase> <phrase role="identifier">value</phrase><phrase role="special">)</phrase> <phrase role="special">{</phrase>
-        <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">check</phrase> <phrase role="identifier">c</phrase> <phrase role="special">=</phrase> <phrase role="identifier">boot</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">public_function</phrase><phrase role="special">(</phrase><phrase role="keyword">this</phrase><phrase role="special">)</phrase>
+        <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">check</phrase> <phrase role="identifier">c</phrase> <phrase role="special">=</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">public_function</phrase><phrase role="special">(</phrase><phrase role="keyword">this</phrase><phrase role="special">)</phrase>
             <phrase role="special">.</phrase><phrase role="identifier">postcondition</phrase><phrase role="special">([&amp;]</phrase> <phrase role="special">{</phrase>
-                <phrase role="comment">// Guard with `if constexpr` for T without `==`.</phrase>
-                <phrase role="keyword">if</phrase> <phrase role="keyword">constexpr</phrase><phrase role="special">(</phrase><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">has_equal_to</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">T</phrase><phrase role="special">&gt;::</phrase><phrase role="identifier">value</phrase><phrase role="special">)</phrase>
-                    <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">back</phrase><phrase role="special">()</phrase> <phrase role="special">==</phrase> <phrase role="identifier">value</phrase><phrase role="special">);</phrase>
+                <phrase role="comment">// Instead of `ASSERT(back() == value)` for T without `==`.</phrase>
+                <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase>
+                    <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">condition_if</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">has_equal_to</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">T</phrase><phrase role="special">&gt;</phrase> <phrase role="special">&gt;(</phrase>
+                        <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">bind</phrase><phrase role="special">(</phrase><phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">equal_to</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">T</phrase><phrase role="special">&gt;(),</phrase>
+                            <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">cref</phrase><phrase role="special">(</phrase><phrase role="identifier">back</phrase><phrase role="special">()),</phrase>
+                            <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">cref</phrase><phrase role="special">(</phrase><phrase role="identifier">value</phrase><phrase role="special">)</phrase>
+                        <phrase role="special">)</phrase>
+                    <phrase role="special">)</phrase>
+                <phrase role="special">);</phrase>
             <phrase role="special">})</phrase>
         <phrase role="special">;</phrase>
 
         <phrase role="identifier">vect_</phrase><phrase role="special">.</phrase><phrase role="identifier">push_back</phrase><phrase role="special">(</phrase><phrase role="identifier">value</phrase><phrase role="special">);</phrase>
     <phrase role="special">}</phrase>
 
-
-
-
-
-
-
     <phrase role="comment">/* ... */</phrase>
 </programlisting>
-                </para>
-              </entry>
-            </row>
-          </tbody>
-        </tgroup>
-      </informaltable>
+      </para>
       <para>
         More in general, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.condition_if">boost::contract::condition_if</link></computeroutput>
         is used as follow:
         a nullary boolean functor. If <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">Pred</phrase><phrase role="special">::</phrase><phrase role="identifier">value</phrase></computeroutput>
         is statically evaluated to be <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">true</phrase></computeroutput>
         at compile-time then <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">cond</phrase><phrase role="special">()</phrase></computeroutput> is called at run-time and its boolean result
-        is returned by the enclosing <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude">boost::contract::condition_if</computeroutput>
+        is returned by the enclosing <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.condition_if">boost::contract::condition_if</link></computeroutput>
         call. Otherwise, if <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">Pred</phrase><phrase role="special">::</phrase><phrase role="identifier">value</phrase></computeroutput>
         is statically evaluated to be <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">false</phrase></computeroutput>
-        at compile-time then <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude">boost::condition_if</computeroutput>
+        at compile-time then <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.condition_if">boost::contract::condition_if</link></computeroutput>
         trivially returns <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">true</phrase></computeroutput>. Therefore,
         if <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">cond</phrase></computeroutput> is a functor template
         instantiation (not just a functor) then its call that contains the assertion
         operations with the extra type requirements (e.g., the equality operator
         <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">==</phrase></computeroutput>) will not be actually instantiated
         and compiled unless the compiler determines at compile-time that <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">Pred</phrase><phrase role="special">::</phrase><phrase role="identifier">value</phrase></computeroutput> is <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">true</phrase></computeroutput>
-        (functor templates like <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">equal_to</phrase></computeroutput>
+        (when used this way, functor templates like <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">equal_to</phrase></computeroutput>
         and C++14 generic lambdas can be used to program <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">cond</phrase></computeroutput>,
         but C++11 lambdas cannot).
       </para>
       <para>
         The <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.condition_if">boost::contract::condition_if</link></computeroutput>
         function template is a special case of the more general <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.call_if">boost::contract::call_if</link></computeroutput>,
-        specifically <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">condition_if</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">Pred</phrase><phrase role="special">&gt;(</phrase><phrase role="identifier">cond</phrase><phrase role="special">)</phrase></computeroutput> is
-        equivalent to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">call_if</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">Pred</phrase><phrase role="special">&gt;(</phrase><phrase role="identifier">cond</phrase><phrase role="special">).</phrase><phrase role="identifier">else_</phrase><phrase role="special">([]</phrase> <phrase role="special">{</phrase> <phrase role="keyword">return</phrase> <phrase role="keyword">true</phrase><phrase role="special">;</phrase> <phrase role="special">})</phrase></computeroutput>.
-        <footnote id="boost_contract.extras.assertion_requirements__templates_.f1">
+        specifically <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.condition_if">boost::contract::condition_if</link></computeroutput><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">&lt;</phrase><phrase role="identifier">Pred</phrase><phrase role="special">&gt;(</phrase><phrase role="identifier">cond</phrase><phrase role="special">)</phrase></computeroutput> is logically equivalent to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.call_if">boost::contract::call_if</link></computeroutput><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">&lt;</phrase><phrase role="identifier">Pred</phrase><phrase role="special">&gt;(</phrase><phrase role="identifier">cond</phrase><phrase role="special">).</phrase><phrase role="identifier">else_</phrase><phrase role="special">([]</phrase> <phrase role="special">{</phrase> <phrase role="keyword">return</phrase>
+        <phrase role="keyword">true</phrase><phrase role="special">;</phrase> <phrase role="special">})</phrase></computeroutput>. <footnote id="boost_contract.extras.assertion_requirements__templates_.f1">
         <para>
-          For optimization reasons, the internal implementation of <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.condition_if">boost::contract::condition_if</link></computeroutput>
-          does not actually use <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.call_if">boost::contract::call_if</link></computeroutput>.
+          The internal implementation of <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.condition_if">boost::contract::condition_if</link></computeroutput>
+          is optimized and it does not actually use <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.call_if">boost::contract::call_if</link></computeroutput>.
         </para>
         </footnote> The <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.call_if">boost::contract::call_if</link></computeroutput>
-        function template accepts a number of optional <emphasis>else-if</emphasis>
+        function template also accepts a number of optional <emphasis>else-if</emphasis>
         statements and one optional <emphasis>else</emphasis> statement:
       </para>
 <programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">call_if</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">Pred1</phrase><phrase role="special">&gt;(</phrase>
         Where <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">Pred1</phrase></computeroutput>, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">Pred2</phrase></computeroutput>, ... are nullary boolean meta-functions
         and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">t1</phrase></computeroutput>, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">t2</phrase></computeroutput>,
         ..., <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">e</phrase></computeroutput> are nullary functors.
-        The return types of the functor calls <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">t1</phrase><phrase role="special">()</phrase></computeroutput>, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">t2</phrase><phrase role="special">()</phrase></computeroutput>, ..., <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">e</phrase><phrase role="special">()</phrase></computeroutput> must either be all the same (possibly all
-        <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">void</phrase></computeroutput>) or be of types implicitly
-        convertible into one another. At run-time <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.call_if">boost::contract::call_if</link></computeroutput>
-        will call the functor <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">t1</phrase><phrase role="special">()</phrase></computeroutput>, or <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">t2</phrase><phrase role="special">()</phrase></computeroutput>, ..., or <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">e</phrase><phrase role="special">()</phrase></computeroutput> depending on which meta-function <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">Pred1</phrase><phrase role="special">::</phrase><phrase role="identifier">value</phrase></computeroutput>, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">Pred2</phrase><phrase role="special">::</phrase><phrase role="identifier">value</phrase></computeroutput>,
-        ... is statically evaluated to be <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">true</phrase></computeroutput>
-        or <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">false</phrase></computeroutput> at compile-time, and
-        it will return the value returned by the functor being called. If <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">t1</phrase></computeroutput>, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">t2</phrase></computeroutput>,
-        ..., <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">e</phrase></computeroutput> are nullary functor
-        template instantiations (not just nullary functors) then their code will
+        The return types of the functor calls <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">t1</phrase><phrase role="special">()</phrase></computeroutput>, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">t2</phrase><phrase role="special">()</phrase></computeroutput>, ..., <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">e</phrase><phrase role="special">()</phrase></computeroutput> must either be all the same (including
+        possibly all <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">void</phrase></computeroutput>) or be of
+        types implicitly convertible into one another. At run-time <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.call_if">boost::contract::call_if</link></computeroutput> will
+        call the functor <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">t1</phrase><phrase role="special">()</phrase></computeroutput>,
+        or <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">t2</phrase><phrase role="special">()</phrase></computeroutput>,
+        ..., or <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">e</phrase><phrase role="special">()</phrase></computeroutput>
+        depending on which meta-function <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">Pred1</phrase><phrase role="special">::</phrase><phrase role="identifier">value</phrase></computeroutput>,
+        <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">Pred2</phrase><phrase role="special">::</phrase><phrase role="identifier">value</phrase></computeroutput>, ... is statically evaluated to be
+        <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">true</phrase></computeroutput> or <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">false</phrase></computeroutput>
+        at compile-time, and it will return the value returned by the functor being
+        called. If <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">t1</phrase></computeroutput>, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">t2</phrase></computeroutput>, ..., <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">e</phrase></computeroutput>
+        are functor template instantiations (not just functors) then their code will
         only be compiled if the compiler determines they need to be actually called
         at run-time (so only if the related <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">Pred1</phrase><phrase role="special">::</phrase><phrase role="identifier">value</phrase></computeroutput>,
         <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">Pred2</phrase><phrase role="special">::</phrase><phrase role="identifier">value</phrase></computeroutput>, ... are respectively evaluated to
         otherwise it is required.
       </para>
       <para>
-        The <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.condition_if_c">boost::contract::condition_if_c</link></computeroutput>,
+        In general, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.call_if">boost::contract::call_if</link></computeroutput>
+        can be used to program contract assertions that compile and check different
+        functor templates depending on related predicates being statically evaluated
+        to be <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">true</phrase></computeroutput> or <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">false</phrase></computeroutput> at compile-time (but in most cases
+        <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.condition_if">boost::contract::condition_if</link></computeroutput>
+        should be sufficient and less verbose to use). The <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.condition_if_c">boost::contract::condition_if_c</link></computeroutput>,
         <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.call_if_c">boost::contract::call_if_c</link></computeroutput>,
         and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">.</phrase><phrase role="identifier">else_if_c</phrase></computeroutput>
         function templates work similarly to their counterparts without the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">...</phrase><phrase role="identifier">_c</phrase></computeroutput> postfix
         boolean values instead of nullary boolean meta-functions.
       </para>
       <para>
-        In general, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.call_if">boost::contract::call_if</link></computeroutput>
-        can be used to program contract assertions that compile and check different
-        functor templates depending on related predicates being statically evaluated
-        to be <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">true</phrase></computeroutput> or <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">false</phrase></computeroutput> at compile-time (but in most cases
-        <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.condition_if">boost::contract::condition_if</link></computeroutput>
-        should be sufficient and less verbose to use). On compilers that support
-        C++17 <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase> <phrase role="keyword">constexpr</phrase></computeroutput>
-        there should be no need to use <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.condition_if">boost::contract::condition_if</link></computeroutput>
+        On compilers that support C++17 <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase>
+        <phrase role="keyword">constexpr</phrase></computeroutput> there should be no need
+        to use <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.condition_if">boost::contract::condition_if</link></computeroutput>
         or <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.call_if">boost::contract::call_if</link></computeroutput>
         because <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase> <phrase role="keyword">constexpr</phrase></computeroutput>
         can be used instead (making the code more readable and easier to program).
-      </para>
-      <bridgehead renderas="sect4" id="boost_contract.extras.assertion_requirements__templates_.h0">
-        <phrase id="boost_contract.extras.assertion_requirements__templates_.if_constexpr_emulation__c__14_"/><link linkend="boost_contract.extras.assertion_requirements__templates_.if_constexpr_emulation__c__14_">If-Constexpr
-        Emulation (C++14)</link>
-      </bridgehead>
-      <para>
-        A part from its use within contracts, on C++14 compilers <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.call_if">boost::contract::call_if</link></computeroutput>
-        can be used together with C++14 generic lambdas to emulate C++17 <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase> <phrase role="keyword">constexpr</phrase></computeroutput>.
         <footnote id="boost_contract.extras.assertion_requirements__templates_.f2">
         <para>
-          Boost.Hana (<computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">hana</phrase><phrase role="special">::</phrase><phrase role="identifier">if_</phrase></computeroutput>) and probably other approaches can
-          also be used together with generic lambdas to emulate C++17 <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase> <phrase role="keyword">constexpr</phrase></computeroutput>
-          on C++14 compilers.
-        </para>
-        </footnote> For example (see <ulink url="../../example/features/call_if_cxx14.cpp"><literal moreinfo="none">call_if_cxx14.cpp</literal></ulink>):
-      </para>
-      <informaltable frame="all">
-        <tgroup cols="2">
-          <thead>
-            <row>
-              <entry>
-                <para>
-                  Until C++17 (without <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase>
-                  <phrase role="keyword">constexpr</phrase></computeroutput>)
-                </para>
-              </entry>
-              <entry>
-                <para>
-                  Since C++17 (with <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase> <phrase role="keyword">constexpr</phrase></computeroutput>)
-                </para>
-              </entry>
-            </row>
-          </thead>
-          <tbody>
-            <row>
-              <entry>
-                <para>
+          <para>
+            A part from its use within contracts, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.call_if">boost::contract::call_if</link></computeroutput>
+            can be used together with C++14 generic lambdas to emulate C++17 <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase> <phrase role="keyword">constexpr</phrase></computeroutput>
+            (<computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">hana</phrase><phrase role="special">::</phrase><phrase role="identifier">if_</phrase></computeroutput> and probably other approaches can
+            also be used together with generic lambdas to emulate C++17 <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase> <phrase role="keyword">constexpr</phrase></computeroutput>
+            on C++14 compilers). For example, the following implementation of <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">myadvance</phrase></computeroutput> will compile since C++14
+            and it is more concise, easier to read and maintain than the usual implementation
+            of <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">advance</phrase></computeroutput> that uses tag dispatching (see
+            <ulink url="../../example/features/call_if_cxx14.cpp"><literal moreinfo="none">call_if_cxx14.cpp</literal></ulink>):
+          </para>
+          <para>
 <programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> <phrase role="identifier">Iter</phrase><phrase role="special">,</phrase> <phrase role="keyword">typename</phrase> <phrase role="identifier">Dist</phrase><phrase role="special">&gt;</phrase>
 <phrase role="keyword">void</phrase> <phrase role="identifier">myadvance</phrase><phrase role="special">(</phrase><phrase role="identifier">Iter</phrase><phrase role="special">&amp;</phrase> <phrase role="identifier">i</phrase><phrase role="special">,</phrase> <phrase role="identifier">Dist</phrase> <phrase role="identifier">n</phrase><phrase role="special">)</phrase> <phrase role="special">{</phrase>
     <phrase role="identifier">Iter</phrase><phrase role="special">*</phrase> <phrase role="identifier">p</phrase> <phrase role="special">=</phrase> <phrase role="special">&amp;</phrase><phrase role="identifier">i</phrase><phrase role="special">;</phrase> <phrase role="comment">// So captures change actual pointed iterator value.</phrase>
     <phrase role="special">);</phrase>
 <phrase role="special">}</phrase>
 </programlisting>
-                </para>
-              </entry>
-              <entry>
-                <para>
+          </para>
+          <para>
+            Of course, since C++17 the implementation that uses <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase>
+            <phrase role="keyword">constexpr</phrase></computeroutput> is even more readable
+            and concise:
 <programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> <phrase role="identifier">Iter</phrase><phrase role="special">,</phrase> <phrase role="keyword">typename</phrase> <phrase role="identifier">Dist</phrase><phrase role="special">&gt;</phrase>
 <phrase role="keyword">void</phrase> <phrase role="identifier">myadvance</phrase><phrase role="special">(</phrase><phrase role="identifier">Iter</phrase><phrase role="special">&amp;</phrase> <phrase role="identifier">i</phrase><phrase role="special">,</phrase> <phrase role="identifier">Dist</phrase> <phrase role="identifier">n</phrase><phrase role="special">)</phrase> <phrase role="special">{</phrase>
     <phrase role="keyword">if</phrase> <phrase role="keyword">constexpr</phrase><phrase role="special">(</phrase><phrase role="identifier">is_random_access_iterator</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">Iter</phrase><phrase role="special">&gt;::</phrase><phrase role="identifier">value</phrase><phrase role="special">)</phrase> <phrase role="special">{</phrase>
         <phrase role="keyword">if</phrase><phrase role="special">(</phrase><phrase role="identifier">n</phrase> <phrase role="special">&gt;=</phrase> <phrase role="number">0</phrase><phrase role="special">)</phrase> <phrase role="keyword">while</phrase><phrase role="special">(</phrase><phrase role="identifier">n</phrase><phrase role="special">--)</phrase> <phrase role="special">++</phrase><phrase role="identifier">i</phrase><phrase role="special">;</phrase>
         <phrase role="keyword">else</phrase> <phrase role="keyword">while</phrase><phrase role="special">(</phrase><phrase role="identifier">n</phrase><phrase role="special">++)</phrase> <phrase role="special">--</phrase><phrase role="identifier">i</phrase><phrase role="special">;</phrase>
     <phrase role="special">}</phrase> <phrase role="keyword">else</phrase> <phrase role="keyword">if</phrase> <phrase role="keyword">constexpr</phrase><phrase role="special">(</phrase><phrase role="identifier">is_input_iterator</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">Iter</phrase><phrase role="special">&gt;::</phrase><phrase role="identifier">value</phrase><phrase role="special">)</phrase> <phrase role="special">{</phrase>
-        <phrase role="keyword">while</phrase><phrase role="special">(</phrase><phrase role="identifier">n</phrase><phrase role="special">--)</phrase> <phrase role="special">++</phrase><phrase role="identifier">p</phrase><phrase role="special">;</phrase>
+        <phrase role="keyword">while</phrase><phrase role="special">(</phrase><phrase role="identifier">n</phrase><phrase role="special">--)</phrase> <phrase role="special">++</phrase><phrase role="identifier">i</phrase><phrase role="special">;</phrase>
     <phrase role="special">}</phrase> <phrase role="keyword">else</phrase> <phrase role="special">{</phrase>
         <phrase role="keyword">static_assert</phrase><phrase role="special">(</phrase><phrase role="keyword">false</phrase><phrase role="special">,</phrase> <phrase role="string">"requires at least input iterator"</phrase><phrase role="special">);</phrase>
     <phrase role="special">}</phrase>
 <phrase role="special">}</phrase>
 </programlisting>
-                </para>
-              </entry>
-            </row>
-          </tbody>
-        </tgroup>
-      </informaltable>
-      <para>
-        This implementation is more concise, easier to read and maintain than the
-        usual implementation of <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">advance</phrase></computeroutput>
-        that uses tag dispatching. Of course the implementation that uses C++17
-        <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase> <phrase role="keyword">constexpr</phrase></computeroutput>
-        is even more readable and concise.
+          </para>
+        </para>
+        </footnote>
       </para>
     </section>
     <section id="boost_contract.extras.volatile_public_functions">
         for volatile public functions. These <emphasis>volatile class invariants</emphasis>
         are programmed in a public <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">const</phrase> <phrase role="keyword">volatile</phrase></computeroutput> function, named <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">invariant</phrase></computeroutput>,
         taking no argument, and returning <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">void</phrase></computeroutput>
-        (see <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870579312">BOOST_CONTRACT_INVARIANT_FUNC</link></computeroutput>
+        (see <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999724496">BOOST_CONTRACT_INVARIANT_FUNC</link></computeroutput>
         to name the invariant function differently from <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">invariant</phrase></computeroutput>
         and <link linkend="boost_contract.advanced.access_specifiers">Access Specifiers</link>
         to not have to declare it <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">public</phrase></computeroutput>).
           <phrase role="keyword">volatile</phrase></computeroutput> invariants and only non-volatile
           public functions check <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">const</phrase></computeroutput>
           (but not <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">const</phrase> <phrase role="keyword">volatile</phrase></computeroutput>)
-          invariants. This is simple and should serve most cases. If programmers
-          need non-volatile public functions to also check <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">const</phrase>
-          <phrase role="keyword">volatile</phrase></computeroutput> invariants, they can explicitly
-          do so by calling the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">const</phrase> <phrase role="keyword">volatile</phrase></computeroutput> invariant function from the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">const</phrase></computeroutput> invariant function as shown in this
-          documentation.
+          invariants. This is a clear distinction and it should serve most cases.
+          If programmers need non-volatile public functions to also check <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">const</phrase> <phrase role="keyword">volatile</phrase></computeroutput>
+          invariants, they can explicitly do so by calling the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">const</phrase>
+          <phrase role="keyword">volatile</phrase></computeroutput> invariant function from
+          the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">const</phrase></computeroutput> invariant function
+          as shown in this documentation.
         </para>
         </footnote>
       </para>
     <phrase role="keyword">void</phrase> <phrase role="identifier">invariant</phrase><phrase role="special">()</phrase> <phrase role="keyword">const</phrase> <phrase role="keyword">volatile</phrase> <phrase role="special">{</phrase> <phrase role="special">...</phrase> <phrase role="special">}</phrase>                 <phrase role="comment">// Volatile invariants.</phrase>
 
     <phrase role="keyword">void</phrase> <phrase role="identifier">invariant</phrase><phrase role="special">()</phrase> <phrase role="keyword">const</phrase> <phrase role="special">{</phrase>
-        <phrase role="keyword">const_cast</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">u</phrase> <phrase role="keyword">const</phrase> <phrase role="keyword">volatile</phrase><phrase role="special">*&gt;(</phrase><phrase role="keyword">this</phrase><phrase role="special">)-&gt;</phrase><phrase role="identifier">invariant</phrase><phrase role="special">();</phrase>   <phrase role="comment">// Call `const volatile` invariant function above.</phrase>
+        <phrase role="keyword">auto</phrase> <phrase role="keyword">const</phrase> <phrase role="keyword">volatile</phrase><phrase role="special">*</phrase> <phrase role="identifier">cv</phrase> <phrase role="special">=</phrase> <phrase role="keyword">this</phrase><phrase role="special">;</phrase> <phrase role="identifier">cv</phrase><phrase role="special">-&gt;</phrase><phrase role="identifier">invariant</phrase><phrase role="special">();</phrase>    <phrase role="comment">// Call `const volatile` invariant function above.</phrase>
         <phrase role="special">...</phrase>                                                 <phrase role="comment">// Other non-volatile invariants.</phrase>
     <phrase role="special">}</phrase>
 
       <para>
         As with all public operations of a class, also public move operations should
         maintain class invariants (see <link linkend="Stroustrup13_anchor">[Stroustrup13]</link>,
-        p. 520). Specifically, C++ requires the following:
+        p. 520). Specifically, at a minimum C++ requires the following:
       </para>
       <itemizedlist>
         <listitem>
         </listitem>
         <listitem>
           <simpara>
-            The moved-from object can be destroyed (if not for anything else, this
-            requires that class invariants are maintained by move operations because
-            the destructor of the moved-from object requires class invariants to
-            be satisfied at its entry, as always with destructors see <link linkend="boost_contract.contract_programming_overview.destructor_calls">Destructor
+            The moved-from object can be destroyed (if not for any other reason,
+            this requires that class invariants are maintained by move operations
+            because the destructor of the moved-from object requires class invariants
+            to be satisfied at its entry, as always with destructors see <link linkend="boost_contract.contract_programming_overview.destructor_calls">Destructor
             Calls</link>).
           </simpara>
         </listitem>
         Therefore, both the move constructor and the move assignment operator need
         to maintain the class invariants of the moved-from object so their contracts
         can be programmed using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.constructor">boost::contract::constructor</link></computeroutput>
-        and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
+        and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
         as usual. For example (see <ulink url="../../example/features/move.cpp"><literal moreinfo="none">move.cpp</literal></ulink>):
       </para>
       <para>
     <phrase role="special">}</phrase>
 
     <phrase role="comment">// Move constructor.</phrase>
-    <phrase role="comment">/* implicit */</phrase> <phrase role="identifier">circular_buffer</phrase><phrase role="special">(</phrase><phrase role="identifier">circular_buffer</phrase><phrase role="special">&amp;&amp;</phrase> <phrase role="identifier">other</phrase><phrase role="special">)</phrase> <phrase role="special">:</phrase>
+    <phrase role="identifier">circular_buffer</phrase><phrase role="special">(</phrase><phrase role="identifier">circular_buffer</phrase><phrase role="special">&amp;&amp;</phrase> <phrase role="identifier">other</phrase><phrase role="special">)</phrase> <phrase role="special">:</phrase>
         <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">constructor_precondition</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">circular_buffer</phrase><phrase role="special">&gt;([&amp;]</phrase> <phrase role="special">{</phrase>
             <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(!</phrase><phrase role="identifier">other</phrase><phrase role="special">.</phrase><phrase role="identifier">moved</phrase><phrase role="special">());</phrase>
         <phrase role="special">})</phrase>
         on the moved-from object. <footnote id="boost_contract.extras.move_operations.f0">
         <para>
           In this example, the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">moved</phrase><phrase role="special">()</phrase></computeroutput> function is simple enough that programmers
-          could decide to not even call <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
-          from it. However, calling <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
+          could decide to not even call <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
+          from it for optimization reasons. However, calling <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
           from <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">moved</phrase><phrase role="special">()</phrase></computeroutput>
-          has no negative impact a part from run-time overhead because this library
-          already automatically disables contract checking while checking other contracts
+          has no negative impact, a part from run-time overhead, because this library
+          automatically disables contract checking while checking other contracts
           (so this call will not cause infinite recursion).
         </para>
         </footnote>
           and their class has no invariants, programmers should manually define them
           using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.constructor">boost::contract::constructor</link></computeroutput>,
           <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.constructor_precondition">boost::contract::constructor_precondition</link></computeroutput>,
-          and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>
+          and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>
           instead of relying on their default implementations generated by C++. (Same
           as for all other operations automatically implemented by C++.)
         </para>
       <para>
         As always, programmers can decide to not program contracts for a given type.
         Specifically, they might decide to not program contracts for a class that
-        needs to be moved in order to skip the run-time overhead of checking contract
-        assertions to optimize performance (see <link linkend="boost_contract.contract_programming_overview.benefits_and_costs">Benefits
+        needs to be moved in order to avoid the run-time overhead of checking contract
+        assertions and to maximize performance (see <link linkend="boost_contract.contract_programming_overview.benefits_and_costs">Benefits
         and Costs</link>).
       </para>
     </section>
     <section id="boost_contract.extras.unions">
       <title><link linkend="boost_contract.extras.unions">Unions</link></title>
       <para>
-        In C++, a <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">union</phrase></computeroutput> cannot have
-        virtual functions, bases classes, and cannot be used as a base class thus
-        subcontracting (<computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.virtual_">boost::contract::virtual_</link></computeroutput>,
+        A C++ <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">union</phrase></computeroutput> cannot have virtual
+        functions, base classes, and cannot be used as a base class thus subcontracting
+        (<computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.virtual_">boost::contract::virtual_</link></computeroutput>,
         <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OVERRIDE">BOOST_CONTRACT_OVERRIDE</link></computeroutput>,
         etc.) do not apply to unions. Also a <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">union</phrase></computeroutput>
         cannot inherit from <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.constructor_precondition">boost::contract::constructor_precondition</link></computeroutput>
-        (because it cannot have base classes) so such a class is used to declare
-        a local object that checks constructor preconditions (at the very beginning
-        of the constructor before old value copies and other contracts, see declaration
-        of <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">pre</phrase></computeroutput> in the example below).
-        A part from that, this library is used as usual to program contracts for
-        unions. For example (see <ulink url="../../example/features/union.cpp"><literal moreinfo="none">union.cpp</literal></ulink>):
+        (because it cannot have base classes), instead <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.constructor_precondition">boost::contract::constructor_precondition</link></computeroutput>
+        is used to declare a local object that checks constructor preconditions (at
+        the very beginning of the constructor before old value copies and other contracts,
+        see declaration of <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">pre</phrase></computeroutput> in
+        the example below). A part from that, this library is used as usual to program
+        contracts for unions. For example (see <ulink url="../../example/features/union.cpp"><literal moreinfo="none">union.cpp</literal></ulink>):
       </para>
       <para>
 <programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">union</phrase> <phrase role="identifier">positive</phrase> <phrase role="special">{</phrase>
 <phrase role="keyword">public</phrase><phrase role="special">:</phrase>
-    <phrase role="keyword">static</phrase> <phrase role="keyword">void</phrase> <phrase role="identifier">static_invariant</phrase><phrase role="special">()</phrase> <phrase role="special">{</phrase> <phrase role="comment">// Static class invariants.</phrase>
+    <phrase role="keyword">static</phrase> <phrase role="keyword">void</phrase> <phrase role="identifier">static_invariant</phrase><phrase role="special">()</phrase> <phrase role="special">{</phrase> <phrase role="comment">// Static class invariants (as usual).</phrase>
         <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">instances</phrase><phrase role="special">()</phrase> <phrase role="special">&gt;=</phrase> <phrase role="number">0</phrase><phrase role="special">);</phrase>
     <phrase role="special">}</phrase>
 
-    <phrase role="keyword">void</phrase> <phrase role="identifier">invariant</phrase><phrase role="special">()</phrase> <phrase role="keyword">const</phrase> <phrase role="special">{</phrase> <phrase role="comment">// Class invariants.</phrase>
+    <phrase role="keyword">void</phrase> <phrase role="identifier">invariant</phrase><phrase role="special">()</phrase> <phrase role="keyword">const</phrase> <phrase role="special">{</phrase> <phrase role="comment">// Class invariants (as usual).</phrase>
         <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">i_</phrase> <phrase role="special">&gt;</phrase> <phrase role="number">0</phrase><phrase role="special">);</phrase>
         <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">d_</phrase> <phrase role="special">&gt;</phrase> <phrase role="number">0</phrase><phrase role="special">);</phrase>
     <phrase role="special">}</phrase>
 
     <phrase role="comment">// Contracts for constructor, as usual but...</phrase>
-    <phrase role="keyword">explicit</phrase> <phrase role="identifier">positive</phrase><phrase role="special">(</phrase><phrase role="keyword">int</phrase> <phrase role="identifier">x</phrase><phrase role="special">)</phrase> <phrase role="special">{</phrase>
+    <phrase role="keyword">explicit</phrase> <phrase role="identifier">positive</phrase><phrase role="special">(</phrase><phrase role="keyword">int</phrase> <phrase role="identifier">x</phrase><phrase role="special">)</phrase> <phrase role="special">:</phrase> <phrase role="identifier">d_</phrase><phrase role="special">(</phrase><phrase role="number">0</phrase><phrase role="special">)</phrase> <phrase role="special">{</phrase>
         <phrase role="comment">// ...unions cannot have bases so constructor preconditions here.</phrase>
         <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">constructor_precondition</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">positive</phrase><phrase role="special">&gt;</phrase> <phrase role="identifier">pre</phrase><phrase role="special">([&amp;]</phrase> <phrase role="special">{</phrase>
             <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">x</phrase> <phrase role="special">&gt;</phrase> <phrase role="number">0</phrase><phrase role="special">);</phrase>
                 <phrase role="identifier">BOOST_CONTRACT_OLDOF</phrase><phrase role="special">(</phrase><phrase role="identifier">instances</phrase><phrase role="special">());</phrase>
         <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">check</phrase> <phrase role="identifier">c</phrase> <phrase role="special">=</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">constructor</phrase><phrase role="special">(</phrase><phrase role="keyword">this</phrase><phrase role="special">)</phrase>
             <phrase role="special">.</phrase><phrase role="identifier">postcondition</phrase><phrase role="special">([&amp;]</phrase> <phrase role="special">{</phrase>
+                <phrase role="special">{</phrase> <phrase role="keyword">int</phrase> <phrase role="identifier">y</phrase><phrase role="special">;</phrase> <phrase role="identifier">get</phrase><phrase role="special">(</phrase><phrase role="identifier">y</phrase><phrase role="special">);</phrase> <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">y</phrase> <phrase role="special">==</phrase> <phrase role="identifier">x</phrase><phrase role="special">);</phrase> <phrase role="special">}</phrase>
                 <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">instances</phrase><phrase role="special">()</phrase> <phrase role="special">==</phrase> <phrase role="special">*</phrase><phrase role="identifier">old_instances</phrase> <phrase role="special">+</phrase> <phrase role="number">1</phrase><phrase role="special">);</phrase>
             <phrase role="special">})</phrase>
         <phrase role="special">;</phrase>
     <phrase role="special">}</phrase>
 
     <phrase role="comment">// Contracts for public function (as usual, but no virtual or override).</phrase>
-    <phrase role="keyword">void</phrase> <phrase role="identifier">get</phrase><phrase role="special">(</phrase><phrase role="keyword">int</phrase><phrase role="special">&amp;</phrase> <phrase role="identifier">x</phrase><phrase role="special">)</phrase> <phrase role="special">{</phrase>
+    <phrase role="keyword">void</phrase> <phrase role="identifier">get</phrase><phrase role="special">(</phrase><phrase role="keyword">int</phrase><phrase role="special">&amp;</phrase> <phrase role="identifier">x</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase> <phrase role="special">{</phrase>
         <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">check</phrase> <phrase role="identifier">c</phrase> <phrase role="special">=</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">public_function</phrase><phrase role="special">(</phrase><phrase role="keyword">this</phrase><phrase role="special">)</phrase>
             <phrase role="special">.</phrase><phrase role="identifier">postcondition</phrase><phrase role="special">([&amp;]</phrase> <phrase role="special">{</phrase>
                 <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">x</phrase> <phrase role="special">&gt;</phrase> <phrase role="number">0</phrase><phrase role="special">);</phrase>
-            <phrase role="special">});</phrase>
+            <phrase role="special">})</phrase>
         <phrase role="special">;</phrase>
 
         <phrase role="identifier">x</phrase> <phrase role="special">=</phrase> <phrase role="identifier">i_</phrase><phrase role="special">;</phrase>
         complexity: <footnote id="boost_contract.extras.assertion_levels.f0">
         <para>
           The assertion levels predefined by this library are similar to the default,
-          audit, and axiom levels proposed in <link linkend="P0380_anchor">[P0380]</link>.
+          audit, and axiom levels from <link linkend="P0380_anchor">[P0380]</link>.
         </para>
         </footnote>
       </para>
             <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput>
             is used to assert conditions that are not computationally expensive,
             at least compared to the cost of executing the function body. These assertions
-            are always checked at run-time, they are not disabled.
+            are the ones we have seen so far, they are always checked at run-time
+            and they cannot be disabled.
           </simpara>
         </listitem>
         <listitem>
           <simpara>
-            <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123871181520">BOOST_CONTRACT_ASSERT_AUDIT</link></computeroutput>
+            <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45395000817520">BOOST_CONTRACT_ASSERT_AUDIT</link></computeroutput>
             is used to assert conditions that are computationally expensive compared
             to the cost of executing the function body. These assertions are not
             checked at run-time unless programmers explicitly define <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_AUDITS">BOOST_CONTRACT_AUDITS</link></computeroutput>
-            (undefined by default), but the conditions are always compiled and validated
-            syntactically (even when they are not actually evaluated and checked
-            at run-time).
+            (undefined by default), but the asserted conditions are always compiled
+            and therefore validated syntactically (even when they are not actually
+            evaluated and checked at run-time).
           </simpara>
         </listitem>
         <listitem>
           <simpara>
-            <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123897980656">BOOST_CONTRACT_ASSERT_AXIOM</link></computeroutput>
+            <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45395027441616">BOOST_CONTRACT_ASSERT_AXIOM</link></computeroutput>
             is used to assert conditions that are computationally prohibitive, at
             least compared to the cost of executing the function body. These assertions
             are never evaluated or checked at run-time, but the asserted conditions
-            are always compiled and validated syntactically so these assertions can
-            serve as formal comments in the code.
+            are always compiled and therefore validated syntactically (so these assertions
+            can serve as formal comments to the code).
           </simpara>
         </listitem>
       </itemizedlist>
       <para>
         In addition, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_CHECK_AUDIT">BOOST_CONTRACT_CHECK_AUDIT</link></computeroutput>
         and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_CHECK_AXIOM">BOOST_CONTRACT_CHECK_AXIOM</link></computeroutput>
-        are similar to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123871181520">BOOST_CONTRACT_ASSERT_AUDIT</link></computeroutput>
-        and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123897980656">BOOST_CONTRACT_ASSERT_AXIOM</link></computeroutput>
+        are similar to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45395000817520">BOOST_CONTRACT_ASSERT_AUDIT</link></computeroutput>
+        and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45395027441616">BOOST_CONTRACT_ASSERT_AXIOM</link></computeroutput>
         but they are used to program audit and axiom levels for implementation checks
         instead of assertions (see <link linkend="boost_contract.advanced.implementation_checks">Implementation
         Checks</link>).
       </para>
       <para>
-        For example, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123871181520">BOOST_CONTRACT_ASSERT_AUDIT</link></computeroutput>
+        For example, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45395000817520">BOOST_CONTRACT_ASSERT_AUDIT</link></computeroutput>
         can be used to program computationally expensive assertions (see <ulink url="../../example/features/assertion_level.cpp"><literal moreinfo="none">assertion_level.cpp</literal></ulink>):
       </para>
       <para>
 </programlisting>
       </para>
       <para>
-        The condition passed to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123897980656">BOOST_CONTRACT_ASSERT_AXIOM</link></computeroutput>
+        The condition passed to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45395027441616">BOOST_CONTRACT_ASSERT_AXIOM</link></computeroutput>
         is compiled but not actually evaluated at run-time so this macro can be used
         to program computationally prohibitive assertions but also assertions that
         cannot actually be programmed in C++ using functions that are declared but
 </programlisting>
       </para>
       <para>
-        In addition to the assertion levels predefined by this library, programmers
-        are free to define their own. For example, the following macro could be used
-        to program and selectively disable assertions that have exponential computational
-        complexity <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">O</phrase><phrase role="special">(</phrase><phrase role="identifier">e</phrase><phrase role="special">^</phrase><phrase role="identifier">n</phrase><phrase role="special">)</phrase></computeroutput>:
+        In addition to these assertion levels that are predefined by this library,
+        programmers are free to define their own. For example, the following macro
+        could be used to program and selectively disable assertions that have exponential
+        computational complexity <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">O</phrase><phrase role="special">(</phrase><phrase role="identifier">e</phrase><phrase role="special">^</phrase><phrase role="identifier">n</phrase><phrase role="special">)</phrase></computeroutput>:
       </para>
-<programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="preprocessor">#ifdef</phrase> <phrase role="identifier">NO_EXPONENTIALLY_COMPLEX_ASSERTIONS</phrase>
-    <phrase role="comment">// Following will compile but never actually evaluate `cond`.</phrase>
-    <phrase role="preprocessor">#define</phrase> <phrase role="identifier">EXP_ASSERTION</phrase><phrase role="special">(</phrase><phrase role="identifier">cond</phrase><phrase role="special">)</phrase> <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="keyword">true</phrase> <phrase role="special">||</phrase> <phrase role="special">(</phrase><phrase role="identifier">cond</phrase><phrase role="special">))</phrase>
-<phrase role="preprocessor">#else</phrase>
+<programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="preprocessor">#ifdef</phrase> <phrase role="identifier">EXPONENTIALLY_COMPLEX_ASSERTIONS</phrase>
     <phrase role="comment">// Following will compile and also evaluate `cond`.</phrase>
-    <phrase role="preprocessor">#define</phrase> <phrase role="identifier">EXP_ASSERTION</phrase><phrase role="special">(</phrase><phrase role="identifier">cond</phrase><phrase role="special">)</phrase> <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">cond</phrase><phrase role="special">)</phrase>
+    <phrase role="preprocessor">#define</phrase> <phrase role="identifier">ASSERT_EXP</phrase><phrase role="special">(</phrase><phrase role="identifier">cond</phrase><phrase role="special">)</phrase> <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">cond</phrase><phrase role="special">)</phrase>
+<phrase role="preprocessor">#else</phrase>
+    <phrase role="comment">// Following will compile but never actually evaluate `cond`.</phrase>
+    <phrase role="preprocessor">#define</phrase> <phrase role="identifier">ASSERT_EXP</phrase><phrase role="special">(</phrase><phrase role="identifier">cond</phrase><phrase role="special">)</phrase> <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="keyword">true</phrase> <phrase role="special">||</phrase> <phrase role="special">(</phrase><phrase role="identifier">cond</phrase><phrase role="special">))</phrase>
 <phrase role="preprocessor">#endif</phrase>
 
 <phrase role="special">...</phrase>
 
-<phrase role="identifier">EXP_ASSERTION</phrase><phrase role="special">(</phrase><literal moreinfo="none"><emphasis>some-exponentially-complex-boolean-condition</emphasis></literal><phrase role="special">);</phrase>
+<phrase role="identifier">ASSERT_EXP</phrase><phrase role="special">(</phrase><literal moreinfo="none"><emphasis>some-exponentially-complex-boolean-condition</emphasis></literal><phrase role="special">);</phrase>
 </programlisting>
     </section>
     <section id="boost_contract.extras.disable_contract_checking">
         and Costs</link>). Therefore, programmers can define any combination of the
         following macros (<computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">-</phrase><phrase role="identifier">D</phrase></computeroutput>
         option in Clang and GCC, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">/</phrase><phrase role="identifier">D</phrase></computeroutput>
-        option in MSVC, etc.) to instruct this library to not check specific kind
+        option in MSVC, etc.) to instruct this library to not check specific groups
         of contract conditions at run-time:
       </para>
       <itemizedlist>
         <listitem>
           <simpara>
-            Define <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870517808">BOOST_CONTRACT_NO_PRECONDITIONS</link></computeroutput>
+            Define <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999662416">BOOST_CONTRACT_NO_PRECONDITIONS</link></computeroutput>
             to not check preconditions.
           </simpara>
         </listitem>
         <listitem>
           <simpara>
-            Define <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870511440">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput>
+            Define <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999656032">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput>
             to not check postconditions.
           </simpara>
         </listitem>
         </listitem>
         <listitem>
           <simpara>
-            Define <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870492704">BOOST_CONTRACT_NO_ENTRY_INVARIANTS</link></computeroutput>
+            Define <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999637264">BOOST_CONTRACT_NO_ENTRY_INVARIANTS</link></computeroutput>
             to not check class invariants at call entry.
           </simpara>
         </listitem>
         <listitem>
           <simpara>
-            Define <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870485088">BOOST_CONTRACT_NO_EXIT_INVARIANTS</link></computeroutput>
+            Define <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999629648">BOOST_CONTRACT_NO_EXIT_INVARIANTS</link></computeroutput>
             to not check class invariants at call exit.
           </simpara>
         </listitem>
         <listitem>
           <simpara>
-            Or, define <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870477472">BOOST_CONTRACT_NO_INVARIANTS</link></computeroutput>
+            Or, define <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999622032">BOOST_CONTRACT_NO_INVARIANTS</link></computeroutput>
             to not check class invariants at both call entry and exit. (This is provided
-            for convenience, it is equivalent to define both <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870492704">BOOST_CONTRACT_NO_ENTRY_INVARIANTS</link></computeroutput>
-            and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870485088">BOOST_CONTRACT_NO_EXIT_INVARIANTS</link></computeroutput>.)
+            for convenience, it is equivalent to defining both <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999637264">BOOST_CONTRACT_NO_ENTRY_INVARIANTS</link></computeroutput>
+            and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999629648">BOOST_CONTRACT_NO_EXIT_INVARIANTS</link></computeroutput>.)
           </simpara>
         </listitem>
         <listitem>
           <simpara>
             Define <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_NO_CHECKS">BOOST_CONTRACT_NO_CHECKS</link></computeroutput>
-            to not perform implementation checks.
+            to not evaluate implementation checks.
           </simpara>
         </listitem>
       </itemizedlist>
       <note>
         <para>
           Old values can be used by both postconditions and exception guarantees
-          so it is necessary to define both <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870511440">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput>
+          so it is necessary to define both <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999656032">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput>
           and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_NO_EXCEPTS">BOOST_CONTRACT_NO_EXCEPTS</link></computeroutput>
           to disable old value copies.
         </para>
         and compile-time overhead associated with checking and compiling contracts
         (see <link linkend="boost_contract.extras.disable_contract_compilation__macro_interface_">Disable
         Contract Compilation</link> for techniques to completely remove any run-time
-        and compile-time overhead associated with contract code).
+        and compile-time overheads associated with contract code).
       </para>
       <para>
         For example, programmers could decide to check all contracts during early
         development builds, but later check only preconditions and maybe entry invariants
-        for release builds by defining <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870511440">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput>,
+        for release builds by defining <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999656032">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput>,
         <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_NO_EXCEPTS">BOOST_CONTRACT_NO_EXCEPTS</link></computeroutput>,
-        <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870485088">BOOST_CONTRACT_NO_EXIT_INVARIANTS</link></computeroutput>,
+        <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999629648">BOOST_CONTRACT_NO_EXIT_INVARIANTS</link></computeroutput>,
         and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_NO_CHECKS">BOOST_CONTRACT_NO_CHECKS</link></computeroutput>.
       </para>
     </section>
       <para>
         This library provides macros that can be used to completely disable compile-time
         and run-time overhead introduced by contracts but at the cost of manually
-        programming <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="preprocessor">#ifndef</phrase></computeroutput> statements
-        around contract code:
+        programming <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="preprocessor">#ifndef</phrase> <phrase role="identifier">BOOST_CONTRACT_NO_</phrase><phrase role="special">...</phrase></computeroutput> statements around contract code:
       </para>
       <itemizedlist>
         <listitem>
           <simpara>
-            This library defines <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870460880">BOOST_CONTRACT_NO_CONSTRUCTORS</link></computeroutput>
+            This library defines <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999605408">BOOST_CONTRACT_NO_CONSTRUCTORS</link></computeroutput>
             when contract checking is disabled for constructors.
           </simpara>
         </listitem>
         <listitem>
           <simpara>
-            This library defines <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870450032">BOOST_CONTRACT_NO_DESTRUCTORS</link></computeroutput>
+            This library defines <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999594544">BOOST_CONTRACT_NO_DESTRUCTORS</link></computeroutput>
             when contract checking is disabled for destructors.
           </simpara>
         </listitem>
         <listitem>
           <simpara>
-            This library defines <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870441776">BOOST_CONTRACT_NO_PUBLIC_FUNCTIONS</link></computeroutput>
+            This library defines <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999586272">BOOST_CONTRACT_NO_PUBLIC_FUNCTIONS</link></computeroutput>
             when contract checking is disabled for public functions.
           </simpara>
         </listitem>
         <listitem>
           <simpara>
-            This library defines <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870432592">BOOST_CONTRACT_NO_FUNCTIONS</link></computeroutput>
+            This library defines <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999577072">BOOST_CONTRACT_NO_FUNCTIONS</link></computeroutput>
             when contract checking is disabled for (non-public and non-member) functions.
           </simpara>
         </listitem>
       </itemizedlist>
       <para>
         These macros are not configuration macros and they should not be defined
-        directly by programmers (otherwise this library will generate compile-time
-        error). Instead, these macros are automatically defined by this library when
-        programmers define <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870517808">BOOST_CONTRACT_NO_PRECONDITIONS</link></computeroutput>,
-        <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870511440">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput>,
+        directly by programmers (otherwise this library will generate compile-time
+        errors). Instead, these macros are automatically defined by this library
+        when programmers define <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999662416">BOOST_CONTRACT_NO_PRECONDITIONS</link></computeroutput>,
+        <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999656032">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput>,
         <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_NO_EXCEPTS">BOOST_CONTRACT_NO_EXCEPTS</link></computeroutput>,
-        <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870477472">BOOST_CONTRACT_NO_INVARIANTS</link></computeroutput>
-        (or <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870492704">BOOST_CONTRACT_NO_ENTRY_INVARIANTS</link></computeroutput>
-        and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870485088">BOOST_CONTRACT_NO_EXIT_INVARIANTS</link></computeroutput>),
+        <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999622032">BOOST_CONTRACT_NO_INVARIANTS</link></computeroutput>
+        (or <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999637264">BOOST_CONTRACT_NO_ENTRY_INVARIANTS</link></computeroutput>
+        and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999629648">BOOST_CONTRACT_NO_EXIT_INVARIANTS</link></computeroutput>),
         and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_NO_CHECKS">BOOST_CONTRACT_NO_CHECKS</link></computeroutput>
         (see <link linkend="boost_contract.extras.disable_contract_checking">Disable
         Contract Checking</link>).
       </para>
       <para>
-        Alternatively, this library provides a macro-based interface <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="header.boost.contract_macro_hpp">boost/contract_macro.hpp</link></computeroutput> that
-        can also be used to completely disable compile-time and run-time overhead
-        introduced by contracts. For example, the following code shows how to use
-        both the macro interface and the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="preprocessor">#ifndef</phrase>
+        Alternatively, this library provides a macro-based interface defined in
+        <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="header.boost.contract_macro_hpp">boost/contract_macro.hpp</link></computeroutput>
+        that can also be used to completely disable compile-time and run-time overheads
+        introduced by contracts but without the burden of manually writing the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="preprocessor">#ifndef</phrase> <phrase role="identifier">BOOST_CONTRACT_NO_</phrase><phrase role="special">...</phrase></computeroutput> statements. For example, the following
+        code shows how to use both the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="header.boost.contract_macro_hpp">boost/contract_macro.hpp</link></computeroutput>
+        macro interface and the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="preprocessor">#ifndef</phrase>
         <phrase role="identifier">BOOST_CONTRACT_NO_</phrase><phrase role="special">...</phrase></computeroutput>
-        statements to completely disable compile-time and run-time overhead for non-member
-        function contracts (see <ulink url="../../example/features/ifdef_macro.cpp"><literal moreinfo="none">ifdef_macro.cpp</literal></ulink>
+        statements to completely disable compile-time and run-time overheads for
+        non-member function contracts (see <ulink url="../../example/features/ifdef_macro.cpp"><literal moreinfo="none">ifdef_macro.cpp</literal></ulink>
         and <ulink url="../../example/features/ifdef.cpp"><literal moreinfo="none">ifdef.cpp</literal></ulink>):
       </para>
       <informaltable frame="all">
       </informaltable>
       <para>
         The same can be done to disable contract code complication for private and
-        protected functions. The <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123869551136">BOOST_CONTRACT_OLD_PTR_IF_COPYABLE</link></computeroutput>
+        protected functions. The <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394998674080">BOOST_CONTRACT_OLD_PTR_IF_COPYABLE</link></computeroutput>
         macro is provided to handle non-copyable old value types (similar to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.old_ptr_if_copyable">boost::contract::old_ptr_if_copyable</link></computeroutput>).
-        For constructors, destructors, and public functions instead (see <ulink url="../../example/features/ifdef_macro.cpp"><literal moreinfo="none">ifdef_macro.cpp</literal></ulink>
+      </para>
+      <para>
+        For constructors, destructors, and public functions the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="header.boost.contract_macro_hpp">boost/contract_macro.hpp</link></computeroutput>
+        macro interface and the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="preprocessor">#ifndef</phrase>
+        <phrase role="identifier">BOOST_CONTRACT_NO_</phrase><phrase role="special">...</phrase></computeroutput>
+        statements can be used as follow (see <ulink url="../../example/features/ifdef_macro.cpp"><literal moreinfo="none">ifdef_macro.cpp</literal></ulink>
         and <ulink url="../../example/features/ifdef.cpp"><literal moreinfo="none">ifdef.cpp</literal></ulink>):
       </para>
       <informaltable frame="all">
         </tgroup>
       </informaltable>
       <para>
-        Static and volatile class invariants can be programmed using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123869498768">BOOST_CONTRACT_STATIC_INVARIANT</link></computeroutput>
-        and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123869512624">BOOST_CONTRACT_INVARIANT_VOLATILE</link></computeroutput>
+        Static and volatile class invariants can be programmed using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394998621472">BOOST_CONTRACT_STATIC_INVARIANT</link></computeroutput>
+        and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394998635328">BOOST_CONTRACT_INVARIANT_VOLATILE</link></computeroutput>
         respectively (these macros expand code equivalent to the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">static</phrase>
         <phrase role="keyword">void</phrase> <phrase role="identifier">BOOST_CONTRACT_STATIC_INVARIANT_FUNC</phrase><phrase role="special">()</phrase></computeroutput> and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">void</phrase>
         <phrase role="identifier">BOOST_CONTRACT_INVARIANT_FUNC</phrase><phrase role="special">()</phrase>
         functions).
       </para>
       <para>
-        The macro interface is usually preferred because more concise and easier
-        to use than programming <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="preprocessor">#ifndef</phrase>
-        <phrase role="identifier">BOOST_CONTRACT_NO_</phrase><phrase role="special">...</phrase></computeroutput>
+        The <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="header.boost.contract_macro_hpp">boost/contract_macro.hpp</link></computeroutput>
+        macro interface is usually preferred because more concise and easier to use
+        than programming <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="preprocessor">#ifndef</phrase> <phrase role="identifier">BOOST_CONTRACT_NO_</phrase><phrase role="special">...</phrase></computeroutput>
         statements by hand. However, C++ macros expand on a single line of code and
-        that can make compiler errors less useful when using the macro interface
+        that can make compiler errors less useful when using this macro interface
         plus all contract assertions within a given set of preconditions, postconditions,
         exception guarantees, and class invariants will list the same line number
         in error messages when assertions fail at run-time (but error messages still
-        list the assertion code and that should allow programmers to identify the
-        specific assertion that failed). Finally, the macro interface leaves a bit
-        of contract decorations in the code but that should add no measurable compile-time
-        and run-time overhead (specifically, extra <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.virtual_">boost::contract::virtual_</link></computeroutput><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">*</phrase></computeroutput> parameters, calls to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.constructor_precondition">boost::contract::constructor_precondition</link></computeroutput>
+        list the assertion code and that should still allow programmers to identify
+        the specific assertion that failed). Finally, the macro interface leaves
+        a bit of contract decorations in the code but that should add no measurable
+        compile-time or run-time overhead (specifically, extra <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.virtual_">boost::contract::virtual_</link></computeroutput><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">*</phrase></computeroutput> parameters, calls to <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.constructor_precondition">boost::contract::constructor_precondition</link></computeroutput>
         default constructor which does nothing, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_BASE_TYPES">BOOST_CONTRACT_BASE_TYPES</link></computeroutput>
         <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">typedef</phrase></computeroutput>s, and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.access">boost::contract::access</link></computeroutput>
-        friendships are left in user code even when contracts are disabled).
+        friendships are left in user code even when contracts are disabled unless
+        <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="preprocessor">#ifndef</phrase> <phrase role="identifier">BOOST_CONTRACT_NO_</phrase><phrase role="special">...</phrase></computeroutput> statements are used).
       </para>
       <para>
         Disabling contract as shown in <link linkend="boost_contract.extras.disable_contract_checking">Disable
         Usually, if the overhead of checking preconditions and other assertions is
         already considered acceptable for an application then the compile-time overhead
         of contracts should not represent an issue and it should be sufficient to
-        be able to disable contract checking at run-time as indicated in <link linkend="boost_contract.extras.disable_contract_checking">Disable
-        Contract Checking</link> (without a real need to use the macro interface
-        or the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="preprocessor">#ifndef</phrase> <phrase role="identifier">BOOST_CONTRACT_NO_</phrase><phrase role="special">...</phrase></computeroutput> statements in most cases).
+        disable contract checking at run-time as indicated in <link linkend="boost_contract.extras.disable_contract_checking">Disable
+        Contract Checking</link> (without a real need to use the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="header.boost.contract_macro_hpp">boost/contract_macro.hpp</link></computeroutput>
+        macro interface or the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="preprocessor">#ifndef</phrase>
+        <phrase role="identifier">BOOST_CONTRACT_NO_</phrase><phrase role="special">...</phrase></computeroutput>
+        statements in most cases).
       </para>
     </section>
     <section id="boost_contract.extras.separate_body_implementation">
         in the object files, users will not be able to see the contract code to understand
         semantics and usage of the functions (again, this might not be a real problem
         in practice for example if contracts are already somehow extracted from the
-        source code by some toll and presented as part of the documentation of the
+        source code by some tool and presented as part of the documentation of the
         shipped software).
       </para>
       <para>
         In any case, when it is truly important to separate contracts from function
         implementation code, function implementations can be programmed in extra
-        <emphasis>body functions</emphasis> (e.g., named <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">...</phrase><phrase role="identifier">_body</phrase></computeroutput>) that are compiled in object files.
-        Function definitions that remain in header files instead will contain just
-        contract code followed by calls the extra body functions. This technique
-        allows to keep the contract code in header files while separating the implementation
-        code to object files. However, it adds the overhead of manually programming
-        an extra function declaration for the body function (plus the limitation
-        that constructor member initialization lists must be programmed in header
-        files because that is where constructors need to be defined to list constructor
-        contract code). <footnote id="boost_contract.extras.separate_body_implementation.f0">
+        <emphasis>body functions</emphasis> (here named <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">...</phrase><phrase role="identifier">_body</phrase></computeroutput>, but any other naming scheme could
+        be used) that are compiled in object files. Function definitions that remain
+        in header files instead will contain just contract code followed by calls
+        to the extra body functions. This technique allows to keep the contract code
+        in header files while separating the implementation code to source and object
+        files. However, this adds the overhead of manually programming an extra function
+        declaration for each body function (plus the limitation that constructor
+        member initialization lists must be programmed in header files because that
+        is where constructors need to be defined to list constructor contract code).
+        <footnote id="boost_contract.extras.separate_body_implementation.f0">
         <para>
           When used as default parameter values, lambda functions allow to program
           code statements within function declarations. However, these lambadas cannot
-          be effectively used to program contracts because the C++11 standard does
-          not allow them to capture any variable (it would be not at all obvious
-          how to correctly define the semantics of such captures). For example, the
-          following code does not compile:
+          be effectively used to program contracts in function declarations instead
+          of definitions. That is because the C++11 standard does not allow lambdas
+          in function declarations to capture any variable (for the good reason that
+          it is not at all obvious how to correctly define the semantics of such
+          captures). For example, the following code is not valid C++ and it does
+          not compile:
 <programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="comment">// Specifications (in declaration).</phrase>
 <phrase role="keyword">int</phrase> <phrase role="identifier">inc</phrase><phrase role="special">(</phrase><phrase role="keyword">int</phrase><phrase role="special">&amp;</phrase> <phrase role="identifier">x</phrase><phrase role="special">,</phrase>
     <phrase role="comment">// Error: Lambdas in default parameters cannot capture `this`, `x`, or any other variable.</phrase>
 </programlisting>
       </para>
       <para>
-        The same technique can be used for non-member, private, protectee functions,
+        The same technique can be used for non-member, private, and protected functions,
         etc.
       </para>
       <note>
           also all this library headers are <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="preprocessor">#include</phrase></computeroutput>d
           only from <literal moreinfo="none">.cpp</literal> files, then these <literal moreinfo="none">.cpp</literal>
           files can be compiled disabling specific contract checking (for example,
-          <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870511440">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput>,
+          <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999656032">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput>,
           <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_NO_EXCEPTS">BOOST_CONTRACT_NO_EXCEPTS</link></computeroutput>,
-          and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123870485088">BOOST_CONTRACT_NO_EXIT_INVARIANTS</link></computeroutput>,
+          and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394999629648">BOOST_CONTRACT_NO_EXIT_INVARIANTS</link></computeroutput>,
           see <link linkend="boost_contract.extras.disable_contract_checking">Disable
           Contract Checking</link>). Then the code in these <literal moreinfo="none">.cpp</literal>
           files will always have such contract checking disabled even when linked
             It allows to use this library on compilers that do not support C++11
             lambda functions (essentially most C++03 compilers with adequate support
             for SFINAE can be used in that case, see <link linkend="boost_contract.extras.no_macros__and_no_variadic_macros_">No
-            Macros</link> to also avoid using variadic macros).
+            Macros</link> to also avoid using variadic macros). <footnote id="boost_contract.extras.no_lambda_functions__no_c__11_.f0">
+            <para>
+              Alternatively, on compilers that do not support C++11 lambda functions,
+              <ulink url="http://www.boost.org/doc/libs/release/libs/local_function/doc/html/index.html">Boost.LocalFunction</ulink>
+              could be used to program the contract functors still within the function
+              definitions (for example, see <ulink url="../../example/features/no_lambdas_local_func.cpp"><literal moreinfo="none">no_lambda_local_func.cpp</literal></ulink>).
+              In general, such a code is less verbose than the example shown in this
+              section that uses contract functions programmed outside of the original
+              function definitions (about 30% less lines of code) but the contract
+              code is hard to read. Other libraries could also be used to program
+              the contract functors without C++11 lambda functions (Boost.Lambda,
+              Boost.Fusion, etc.) but again all these techniques will result in contract
+              code either more verbose, or harder to read and maintain than the code
+              that uses C++11 lambda functions.
+            </para>
+            </footnote>
           </simpara>
         </listitem>
         <listitem>
             Contract functions (i.e., the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">...</phrase><phrase role="identifier">_precondition</phrase></computeroutput>, <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">...</phrase><phrase role="identifier">_old</phrase></computeroutput>, and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">...</phrase><phrase role="identifier">_postcondition</phrase></computeroutput> functions in the example
             below) can be programmed to fully enforce constant-correctness and other
             contract requirements at compile-time (see <link linkend="boost_contract.contract_programming_overview.constant_correctness">Constant-Correctness</link>).
-            <footnote id="boost_contract.extras.no_lambda_functions__no_c__11_.f0">
+            <footnote id="boost_contract.extras.no_lambda_functions__no_c__11_.f1">
             <para>
               If C++ allowed lambda functions to capture variables by constant reference
-              (for example using the syntax <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">[</phrase><phrase role="keyword">const</phrase><phrase role="special">&amp;]</phrase>
+              (for example allowing a syntax like this <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">[</phrase><phrase role="keyword">const</phrase><phrase role="special">&amp;]</phrase>
               <phrase role="special">{</phrase> <phrase role="special">...</phrase>
               <phrase role="special">}</phrase></computeroutput> and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">[</phrase><phrase role="keyword">const</phrase><phrase role="special">&amp;</phrase>
               </computeroutput><literal moreinfo="none"><emphasis>variable-name</emphasis></literal><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">]</phrase> <phrase role="special">{</phrase> <phrase role="special">...</phrase> <phrase role="special">}</phrase></computeroutput>,
               at compile-time. Note that C++11 lambdas allow to capture variables
               by value (using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">[=]</phrase> <phrase role="special">{</phrase>
               <phrase role="special">...</phrase> <phrase role="special">}</phrase></computeroutput>
-              and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">[</phrase></computeroutput><literal moreinfo="none"><emphasis>variable-name</emphasis></literal><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">]</phrase> <phrase role="special">{</phrase> <phrase role="special">...</phrase> <phrase role="special">}</phrase></computeroutput>),
-              these value captures are <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">const</phrase></computeroutput>
+              and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">[</phrase></computeroutput><literal moreinfo="none"><emphasis>variable-name</emphasis></literal><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">]</phrase> <phrase role="special">{</phrase> <phrase role="special">...</phrase> <phrase role="special">}</phrase></computeroutput>)
+              and these value captures are <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">const</phrase></computeroutput>
               (unless the lambda is explicitly declared <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">mutable</phrase></computeroutput>)
               but they are not suitable to program postconditions and exception guarantees
               using this library (because those require capturing by reference, see
           <simpara>
             Code of the contract functions is separated from function body implementations
             (see <link linkend="boost_contract.extras.separate_body_implementation">Separate
-            Body Implementation</link>). <footnote id="boost_contract.extras.no_lambda_functions__no_c__11_.f1">
-            <para>
-              Alternatively, on compilers that do not support C++11 lambda functions,
-              <ulink url="http://www.boost.org/doc/libs/release/libs/local_function/doc/html/index.html">Boost.LocalFunction</ulink>
-              could be used to program the contract functors still within the function
-              definitions (for example, see <ulink url="../../example/features/no_lambdas_local_func.cpp"><literal moreinfo="none">no_lambda_local_func.cpp</literal></ulink>).
-              In general, such a code is less verbose than the example shown in this
-              section that uses contract functions programmed outside of the original
-              function definitions (about 30% less lines of code) but the contract
-              code is hard to read. Other libraries could also be used to program
-              the contract functors without C++11 lambda functions (Boost.Lambda,
-              Boost.Fusion, etc.) but again all these techniques will result in contract
-              code either more verbose, or harder to read and maintain than the code
-              that uses C++11 lambda functions.
-            </para>
-            </footnote>
+            Body Implementation</link>).
           </simpara>
         </listitem>
       </itemizedlist>
       <para>
         However, not using C++11 lambda functions comes at the significant cost of
         having to manually program the extra contract functions and related boiler-plate
-        code. For example (see <ulink url="../../example/features/no_lambdas.hpp"><literal moreinfo="none">no_lambdas.hpp</literal></ulink>
-        and <ulink url="../../example/features/no_lambdas.cpp"><literal moreinfo="none">no_lambdas.cpp</literal></ulink>):
+        code. For example, the header file (see <ulink url="../../example/features/no_lambdas.hpp"><literal moreinfo="none">no_lambdas.hpp</literal></ulink>):
       </para>
       <para>
 <programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">class</phrase> <phrase role="identifier">iarray</phrase> <phrase role="special">:</phrase>
 </programlisting>
       </para>
       <para>
+        And, the source file (see <ulink url="../../example/features/no_lambdas.cpp"><literal moreinfo="none">no_lambdas.cpp</literal></ulink>):
+      </para>
+      <para>
 <programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">iarray</phrase><phrase role="special">::</phrase><phrase role="identifier">iarray</phrase><phrase role="special">(</phrase><phrase role="keyword">unsigned</phrase> <phrase role="identifier">max</phrase><phrase role="special">,</phrase> <phrase role="keyword">unsigned</phrase> <phrase role="identifier">count</phrase><phrase role="special">)</phrase> <phrase role="special">:</phrase>
     <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">constructor_precondition</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">iarray</phrase><phrase role="special">&gt;(</phrase><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">bind</phrase><phrase role="special">(</phrase>
             <phrase role="special">&amp;</phrase><phrase role="identifier">iarray</phrase><phrase role="special">::</phrase><phrase role="identifier">constructor_precondition</phrase><phrase role="special">,</phrase> <phrase role="identifier">max</phrase><phrase role="special">,</phrase> <phrase role="identifier">count</phrase><phrase role="special">)),</phrase>
         </listitem>
         <listitem>
           <simpara>
-            Constructor precondition, old value, and exception guarantee functions
+            For constructors: Precondition, old value, and exception guarantee functions
             should be <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">static</phrase></computeroutput> (because
             there is no valid object <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">this</phrase></computeroutput>
             if the constructor body does not run successfully, see <link linkend="boost_contract.contract_programming_overview.constructor_calls">Constructor
         </listitem>
         <listitem>
           <simpara>
-            Destructor postcondition functions should be <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">static</phrase></computeroutput>
+            For destructors: Postcondition functions should be <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">static</phrase></computeroutput>
             (because there is no valid object <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">this</phrase></computeroutput>
             after the destructor body runs successfully, but exception guarantee
             functions do not have to be <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">static</phrase></computeroutput>
       </para>
       <para>
         The authors think this library is most useful when used together with C++11
-        lambda functions.
+        lambda functions (because of the large amount of boiler-plate code required
+        when C++11 lambdas are not used as also shown by the example above).
       </para>
     </section>
     <section id="boost_contract.extras.no_macros__and_no_variadic_macros_">
         by this library and programming the related code manually instead (the only
         macros that cannot be programmed manually are <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OVERRIDE">BOOST_CONTRACT_OVERRIDE</link></computeroutput>,
         <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OVERRIDES">BOOST_CONTRACT_OVERRIDES</link></computeroutput>,
-        and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123869781472">BOOST_CONTRACT_NAMED_OVERRIDE</link></computeroutput>).
+        and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394998912688">BOOST_CONTRACT_NAMED_OVERRIDE</link></computeroutput>).
       </para>
       <note>
         <para>
         As shown in <link linkend="boost_contract.tutorial.public_function_overrides__subcontracting_">Public
         Function Overrides</link> and <link linkend="boost_contract.advanced.named_overrides">Named
         Overrides</link>, this library provides the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OVERRIDE">BOOST_CONTRACT_OVERRIDE</link></computeroutput>
-        and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123869781472">BOOST_CONTRACT_NAMED_OVERRIDE</link></computeroutput>
+        and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45394998912688">BOOST_CONTRACT_NAMED_OVERRIDE</link></computeroutput>
         macros to program contracts for overriding public functions (see <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_MAX_ARGS">BOOST_CONTRACT_MAX_ARGS</link></computeroutput> for compilers
         that do not support variadic templates). <footnote id="boost_contract.extras.no_macros__and_no_variadic_macros_.f1">
         <para>
         macros (so programmers should be able to use them on any C++ compiler with
         a sound support for SFINAE). <footnote id="boost_contract.extras.no_macros__and_no_variadic_macros_.f2">
         <para>
-          <emphasis role="bold">Rationale:</emphasis> These macros expand SFINAE-based
-          introspection templates that are too complex to be programmed manually
+          <emphasis role="bold">Rationale:</emphasis> These macros expand to SFINAE-based
+          introspection template code that are too complex to be programmed manually
           by users (that remains the case even if C++14 generic lambdas were to be
           used here). On a related note, in theory using C++14 generic lambdas, the
           <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_OVERRIDE">BOOST_CONTRACT_OVERRIDE</link></computeroutput>
         etc. this library provides the <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput>
         macro to assert contract conditions. This is not a variadic macro and programmers
         should be able to use it on all C++ compilers. In any case, the invocation
-        <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">cond</phrase><phrase role="special">)</phrase></computeroutput> expands
-        to code equivalent to the following: <footnote id="boost_contract.extras.no_macros__and_no_variadic_macros_.f3">
+        <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase></computeroutput><literal moreinfo="none"><emphasis>cond</emphasis></literal><computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="special">)</phrase></computeroutput> simply expands to code equivalent to the
+        following: <footnote id="boost_contract.extras.no_macros__and_no_variadic_macros_.f3">
         <para>
           <emphasis role="bold">Rationale:</emphasis> There is no need for the code
           expanded by <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput>
           to also use C++11 <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">__func__</phrase></computeroutput>.
           That is because <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">__func__</phrase></computeroutput>
-          will always expand to the name of <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">operator</phrase><phrase role="special">()</phrase></computeroutput> of the functor used to program the contract
-          assertions (e.g., of the lambda function) and it will not expand to the
-          name of the actual function specifying the contract.
+          will always expand to the name <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">operator</phrase><phrase role="special">()</phrase></computeroutput> of the functor used to program the contract
+          assertions (e.g., the internal name the compiler assigns to lambda functions)
+          and it will not expand to the name of the actual function enclosing the
+          contract declaration.
         </para>
         </footnote>
       </para>
-<programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase><phrase role="special">(!(</phrase><phrase role="identifier">cond</phrase><phrase role="special">))</phrase> <phrase role="special">{</phrase>
+<programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase><phrase role="special">(!(</phrase><literal moreinfo="none"><emphasis>cond</emphasis></literal><phrase role="special">))</phrase> <phrase role="special">{</phrase>
     <phrase role="keyword">throw</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">assertion_failure</phrase><phrase role="special">(</phrase><phrase role="identifier">__FILE__</phrase><phrase role="special">,</phrase> <phrase role="identifier">__LINE__</phrase><phrase role="special">,</phrase>
-            <phrase role="identifier">BOOST_PP_STRINGIZE</phrase><phrase role="special">(</phrase><phrase role="identifier">cond</phrase><phrase role="special">));</phrase>
+            <phrase role="identifier">BOOST_PP_STRINGIZE</phrase><phrase role="special">(</phrase><literal moreinfo="none"><emphasis>cond</emphasis></literal><phrase role="special">));</phrase>
 <phrase role="special">}</phrase>
 </programlisting>
       <para>
         assertions that throw specific user-defined exceptions as follow (see <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__">Throw
         on Failures</link>):
       </para>
-<programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase><phrase role="special">(!</phrase><phrase role="identifier">cond</phrase><phrase role="special">)</phrase> <phrase role="keyword">throw</phrase> <phrase role="identifier">exception_object</phrase><phrase role="special">;</phrase>
+<programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">if</phrase><phrase role="special">(!</phrase><literal moreinfo="none"><emphasis>cond</emphasis></literal><phrase role="special">)</phrase> <phrase role="keyword">throw</phrase> <literal moreinfo="none"><emphasis>exception-object</emphasis></literal><phrase role="special">;</phrase>
 </programlisting>
       <para>
         However, using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput>
         name, line number, etc.
       </para>
       <para>
-        The <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123871181520">BOOST_CONTRACT_ASSERT_AUDIT</link></computeroutput>
-        and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45123897980656">BOOST_CONTRACT_ASSERT_AXIOM</link></computeroutput>
-        macros are not variadic macros and programmers should be able to use them
-        on all C++ compilers. Their implementations are equivalent to the following:
+        As shown in <link linkend="boost_contract.extras.assertion_levels">Assertion
+        Levels</link>, this library pre-defines <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45395000817520">BOOST_CONTRACT_ASSERT_AUDIT</link></computeroutput>
+        and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="BOOST_CO_idm45395027441616">BOOST_CONTRACT_ASSERT_AXIOM</link></computeroutput>
+        assertion levels. These macros are not variadic macros and programmers should
+        be able to use them on all C++ compilers. In any case, their implementations
+        are equivalent to the following:
       </para>
 <programlisting xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="preprocessor">#ifdef</phrase> <phrase role="identifier">BOOST_CONTRACT_AUDITS</phrase>
-    <phrase role="preprocessor">#define</phrase> <phrase role="identifier">BOOST_CONTRACT_ASSERT_AUDIT</phrase><phrase role="special">(</phrase><phrase role="identifier">cond</phrase><phrase role="special">)</phrase> <phrase role="special">\</phrase>
-        <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">cond</phrase><phrase role="special">)</phrase>
+    <phrase role="preprocessor">#define</phrase> <phrase role="identifier">BOOST_CONTRACT_ASSERT_AUDIT</phrase><phrase role="special">(</phrase><literal moreinfo="none"><emphasis>cond</emphasis></literal><phrase role="special">)</phrase> <phrase role="special">\</phrase>
+        <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><literal moreinfo="none"><emphasis>cond</emphasis></literal><phrase role="special">)</phrase>
 <phrase role="preprocessor">#else</phrase>
-    <phrase role="preprocessor">#define</phrase> <phrase role="identifier">BOOST_CONTRACT_ASSERT_AUDIT</phrase><phrase role="special">(</phrase><phrase role="identifier">cond</phrase><phrase role="special">)</phrase> <phrase role="special">\</phrase>
-        <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="keyword">true</phrase> <phrase role="special">||</phrase> <phrase role="special">(</phrase><phrase role="identifier">cond</phrase><phrase role="special">))</phrase>
+    <phrase role="preprocessor">#define</phrase> <phrase role="identifier">BOOST_CONTRACT_ASSERT_AUDIT</phrase><phrase role="special">(</phrase><literal moreinfo="none"><emphasis>cond</emphasis></literal><phrase role="special">)</phrase> <phrase role="special">\</phrase>
+        <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="keyword">true</phrase> <phrase role="special">||</phrase> <phrase role="special">(</phrase><literal moreinfo="none"><emphasis>cond</emphasis></literal><phrase role="special">))</phrase>
 <phrase role="preprocessor">#endif</phrase>
 
-<phrase role="preprocessor">#define</phrase> <phrase role="identifier">BOOST_CONTRACT_ASSERT_AXIOM</phrase><phrase role="special">(</phrase><phrase role="identifier">cond</phrase><phrase role="special">)</phrase> <phrase role="special">\</phrase>
-    <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="keyword">true</phrase> <phrase role="special">||</phrase> <phrase role="special">(</phrase><phrase role="identifier">cond</phrase><phrase role="special">))</phrase>
+<phrase role="preprocessor">#define</phrase> <phrase role="identifier">BOOST_CONTRACT_ASSERT_AXIOM</phrase><phrase role="special">(</phrase><literal moreinfo="none"><emphasis>cond</emphasis></literal><phrase role="special">)</phrase> <phrase role="special">\</phrase>
+    <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="keyword">true</phrase> <phrase role="special">||</phrase> <phrase role="special">(</phrase><literal moreinfo="none"><emphasis>cond</emphasis></literal><phrase role="special">))</phrase>
 </programlisting>
       <bridgehead renderas="sect4" id="boost_contract.extras.no_macros__and_no_variadic_macros_.h2">
         <phrase id="boost_contract.extras.no_macros__and_no_variadic_macros_.base_types__variadic_"/><link linkend="boost_contract.extras.no_macros__and_no_variadic_macros_.base_types__variadic_">Base
       <para>
         The ternary operator <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">copy_old</phrase><phrase role="special">(</phrase><phrase role="identifier">v</phrase><phrase role="special">)</phrase>
         <phrase role="special">?</phrase> <phrase role="identifier">size</phrase><phrase role="special">()</phrase> <phrase role="special">:</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">null_old</phrase><phrase role="special">()</phrase></computeroutput> must be used here to avoid evaluating and
-        copying the old value expression <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">size</phrase><phrase role="special">()</phrase></computeroutput> when <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.copy_old_idm45123869813440">boost::contract::copy_old</link></computeroutput>
+        copying the old value expression <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">size</phrase><phrase role="special">()</phrase></computeroutput> when <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.copy_old_idm45394998944672">boost::contract::copy_old</link></computeroutput>
         returns <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">false</phrase></computeroutput> (because old values
-        are not being copied when postcondition and exception guarantees checking
+        are not being copied when postcondition and exception guarantee checking
         is disabled at run-time, an overridden virtual function call is not checking
-        postconditions or exception guarantees yet, etc.). The enclosing <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.make_old_idm45123869837456">boost::contract::make_old</link></computeroutput>
+        postconditions or exception guarantees yet, etc.). The enclosing <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.make_old_idm45394998968720">boost::contract::make_old</link></computeroutput>
         copies the old value expression and creates an old value pointer. Otherwise,
         <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.null_old">boost::contract::null_old</link></computeroutput>
         indicates that a null old value pointer should be created.
       </para>
       <para>
-        The <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.make_old_idm45123869837456">boost::contract::make_old</link></computeroutput>
-        and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.copy_old_idm45123869813440">boost::contract::copy_old</link></computeroutput>
+        The <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.make_old_idm45394998968720">boost::contract::make_old</link></computeroutput>
+        and <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.copy_old_idm45394998944672">boost::contract::copy_old</link></computeroutput>
         functions are used exactly as shown above but without the extra <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">v</phrase></computeroutput> parameter when they are called from within
         non-virtual functions (see <link linkend="boost_contract.tutorial.public_function_overrides__subcontracting_">Public
-        Function Overrides</link>). The old value pointer returned by <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.make_old_idm45123869837456">boost::contract::make_old</link></computeroutput>
+        Function Overrides</link>). The old value pointer returned by <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.make_old_idm45394998968720">boost::contract::make_old</link></computeroutput>
         can be assigned to either <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.old_ptr">boost::contract::old_ptr</link></computeroutput>
         or <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.old_ptr_if_copyable">boost::contract::old_ptr_if_copyable</link></computeroutput>
         (see <link linkend="boost_contract.extras.old_value_requirements__templates_">Old
         practices, not optimized for execution speed, not complete, and they might
         be more relevant in the context of programming languages different from C++.
         Nevertheless, programmers are encouraged to review these examples to see
-        a few diverse usages of this library that might be relevant to their needs.
+        a few diverse uses of this library that might be relevant to their needs.
       </para>
     </note>
     <para>
-      Sources of the listed examples:
+      The examples in this sections are taken from the following sources:
     </para>
     <itemizedlist>
       <listitem>
         <simpara>
-          <link linkend="N1962_anchor">[N1962]</link>: Examples from the proposal
-          to add contract programming to C++11 (unfortunately, this proposal was
-          never accepted into the standard).
+          <link linkend="N1962_anchor">[N1962]</link>: Examples from a detailed and
+          complete proposal to add contract programming to C++11 (unfortunately,
+          this proposal was never accepted into the standard).
         </simpara>
       </listitem>
       <listitem>
         <simpara>
           <link linkend="Meyer97_anchor">[Meyer97]</link>: Examples from the Eiffel
-          programming language and reprogrammed using this library for C++.
+          programming language (reprogrammed here in C++ using this library).
         </simpara>
       </listitem>
       <listitem>
         <simpara>
           <link linkend="Mitchell02_anchor">[Mitchell02]</link>: Additional examples
-          from the Eiffel programming language and reprogrammed using this library
-          for C++.
+          from the Eiffel programming language (reprogrammed here in C++ using this
+          library).
         </simpara>
       </listitem>
       <listitem>
       </listitem>
     </itemizedlist>
     <para>
-      A few notable examples:
+      The following are some examples of particular interest:
     </para>
     <itemizedlist>
       <listitem>
         </simpara>
       </listitem>
     </itemizedlist>
+    <para>
+      Most of the examples listed here use old values and class invariants which
+      are instead not supported by <link linkend="P0380_anchor">[P0380]</link>. Therefore,
+      there is not meaningful example here that can be directly implemented and compared
+      using <link linkend="P0380_anchor">[P0380]</link> syntax.
+    </para>
     <section id="boost_contract.examples.__n1962___vector__contracts_for_stl_vector_and_comparison_with___n1962___proposed_syntax">
       <title><anchor id="N1962_vector_anchor"/>[N1962] Vector: Contracts for STL
       vector and comparison with <link linkend="N1962_anchor">[N1962]</link> proposed
         <phrase role="keyword">constexpr</phrase></computeroutput>, the following example using
         this library can be simplified removing <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><link linkend="boost.contract.condition_if">boost::contract::condition_if</link></computeroutput>
         and related functor templates such as <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">all_of_equal_to</phrase></computeroutput>,
-        etc. (making it more similar to the pseudo-code on the right-hand side).
+        etc., making it more similar to the pseudo-code on the right-hand side (see
+        <link linkend="boost_contract.extras.assertion_requirements__templates_">Assertion
+        Requirements</link>).
       </para>
       <informaltable frame="all">
         <tgroup cols="2">
       </para>
     </section>
   </section>
-  <section id="reference"><title>Reference</title><section id="header.boost.contract_hpp"><title>Header &lt;<ulink url="../../../../boost/contract.hpp">boost/contract.hpp</ulink>&gt;</title><para>Include all header files required by this library at once (for convenience). </para><para>All header files <computeroutput>boost/contract/*.hpp</computeroutput> are independent from one another and can be included one-by-one to reduce the amount of code to compile from this library in user code (but this was measured to not make an appreciable difference in compile-time so <computeroutput>boost/contract.hpp</computeroutput> can be included directly in most cases). Instead the headers <computeroutput>boost/contract/core/*.hpp</computeroutput> are not independent from other library headers and they are automatically included by the <computeroutput>boost/contract/*.hpp</computeroutput> headers (so the <computeroutput>boost/contract/core/*.hpp</computeroutput> headers are usually not directly included by programmers).</para><para>All files under the <computeroutput>boost/contract/detail/</computeroutput> directory, names within the <computeroutput>boost::contract::detail</computeroutput> namespace, names prefixed with <computeroutput>boost_contract_detail</computeroutput>... and <computeroutput>BOOST_CONTRACT_DETAIL</computeroutput>... (in any namesapce, including user's code) are reserved for internal use of this library and should never be used directly by programmers.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.getting_started"> Getting Started</link> </para>
+  <section id="reference"><title>Reference</title><section id="header.boost.contract_hpp"><title>Header &lt;<ulink url="../../../../boost/contract.hpp">boost/contract.hpp</ulink>&gt;</title><para>Include all header files required by this library at once (for convenience). </para><para>All header files <computeroutput>boost/contract/*.hpp</computeroutput> are independent from one another and can be included one-by-one to reduce the amount of code to compile from this library in user code (but this was measured to not make an appreciable difference in compile-time so <computeroutput>boost/contract.hpp</computeroutput> can be included directly in most cases). Instead the headers <computeroutput>boost/contract/core/*.hpp</computeroutput> are not independent from other library headers and they are automatically included by the <computeroutput>boost/contract/*.hpp</computeroutput> headers (so the <computeroutput>boost/contract/core/*.hpp</computeroutput> headers are usually not directly included by programmers).</para><para>All files under the <computeroutput>boost/contract/detail/</computeroutput> directory, names within the <computeroutput>boost::contract::detail</computeroutput> namespace, names prefixed by <computeroutput>boost_contract_detail</computeroutput>... and <computeroutput>BOOST_CONTRACT_DETAIL</computeroutput>... (in any namesapce, including user's code) are reserved for internal use of this library and should never be used directly by programmers.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.getting_started"> Getting Started</link> </para>
 </para>
 </para>
 </section>
 <section id="header.boost.contract.assert_hpp"><title>Header &lt;<ulink url="../../../../boost/contract/assert.hpp">boost/contract/assert.hpp</ulink>&gt;</title><para>Assert contract conditions. </para><synopsis xmlns:xi="http://www.w3.org/2001/XInclude">
 
 <link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link>(cond)
-<link linkend="BOOST_CO_idm45123871181520">BOOST_CONTRACT_ASSERT_AUDIT</link>(cond)
-<link linkend="BOOST_CO_idm45123897980656">BOOST_CONTRACT_ASSERT_AXIOM</link>(cond)</synopsis>
+<link linkend="BOOST_CO_idm45395000817520">BOOST_CONTRACT_ASSERT_AUDIT</link>(cond)
+<link linkend="BOOST_CO_idm45395027441616">BOOST_CONTRACT_ASSERT_AXIOM</link>(cond)</synopsis>
 <refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CONTRACT_ASSERT"><refmeta><refentrytitle>Macro BOOST_CONTRACT_ASSERT</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_ASSERT</refname><refpurpose>Preferred way to assert contract conditions. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.assert_hpp">boost/contract/assert.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_ASSERT(cond)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>Any exception thrown from within a contract (preconditions, postconditions, exception guarantees, old value copies at body, class invariants, etc.) is interpreted by this library as a contract failure. Therefore, users can program contract assertions manually throwing an exception when an asserted condition is checked to be <computeroutput>false</computeroutput> (this library will then call the appropriate contract failure handler  <computeroutput><link linkend="boost.contract.precondition_failure">boost::contract::precondition_failure</link></computeroutput>, etc.). However, it is preferred to use this macro because it expands to code that throws <computeroutput><link linkend="boost.contract.assertion_failure">boost::contract::assertion_failure</link></computeroutput> with the correct assertion file name (using <computeroutput>__FILE__</computeroutput>), line number (using <computeroutput>__LINE__</computeroutput>), and asserted condition code so to produce informative error messages.</para><para> <computeroutput><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput>, <computeroutput><link linkend="BOOST_CO_idm45123871181520">BOOST_CONTRACT_ASSERT_AUDIT</link></computeroutput>, and <computeroutput><link linkend="BOOST_CO_idm45123897980656">BOOST_CONTRACT_ASSERT_AXIOM</link></computeroutput> are the three assertion levels predefined by this library.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.preconditions"> Preconditions</link>,  <link linkend="boost_contract.tutorial.postconditions"> Postconditions</link>,  <link linkend="boost_contract.tutorial.exception_guarantees"> Exceptions Guarantees</link>,  <link linkend="boost_contract.tutorial.class_invariants"> Class Invariants</link></para>
+</phrase>BOOST_CONTRACT_ASSERT(cond)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>Any exception thrown from within a contract (preconditions, postconditions, exception guarantees, old value copies at body, class invariants, etc.) is interpreted by this library as a contract failure. Therefore, users can program contract assertions manually throwing an exception when an asserted condition is checked to be <computeroutput>false</computeroutput> (this library will then call the appropriate contract failure handler  <computeroutput><link linkend="boost.contract.precondition_failure">boost::contract::precondition_failure</link></computeroutput>, etc.). However, it is preferred to use this macro because it expands to code that throws <computeroutput><link linkend="boost.contract.assertion_failure">boost::contract::assertion_failure</link></computeroutput> with the correct assertion file name (using <computeroutput>__FILE__</computeroutput>), line number (using <computeroutput>__LINE__</computeroutput>), and asserted condition code so to produce informative error messages (C++11 <computeroutput>__func__</computeroutput> is not used here because in most cases it will simply expand to the internal compiler name of the lambda function used to program the contract conditions adding no specificity to the error message).</para><para> <computeroutput><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput>, <computeroutput><link linkend="BOOST_CO_idm45395000817520">BOOST_CONTRACT_ASSERT_AUDIT</link></computeroutput>, and <computeroutput><link linkend="BOOST_CO_idm45395027441616">BOOST_CONTRACT_ASSERT_AXIOM</link></computeroutput> are the three assertion levels predefined by this library.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.preconditions"> Preconditions</link>,  <link linkend="boost_contract.tutorial.postconditions"> Postconditions</link>,  <link linkend="boost_contract.tutorial.exception_guarantees"> Exceptions Guarantees</link>,  <link linkend="boost_contract.tutorial.class_invariants"> Class Invariants</link>,  <link linkend="boost_contract.extras.no_macros__and_no_variadic_macros_"> No Macros</link></para>
 </para>
 
 </para><variablelist spacing="compact"><?dbhtml 
               list-presentation="table"
             ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                       list-presentation="table"
-                    ?><varlistentry><term><computeroutput>cond</computeroutput></term><listitem><para>Boolean contract condition to check. (This is not a variadic macro parameter so any comma it might contain must be protected by round parenthesis, <computeroutput>BOOST_CONTRACT_ASSERT((cond))</computeroutput> will always work.) </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></refsect1></refentry>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45123871181520"><refmeta><refentrytitle>Macro BOOST_CONTRACT_ASSERT_AUDIT</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_ASSERT_AUDIT</refname><refpurpose>Preferred way to assert contract conditions that are computationally expensive, at least compared to the cost of executing the function body. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.assert_hpp">boost/contract/assert.hpp</link>&gt;
+                    ?><varlistentry><term><computeroutput>cond</computeroutput></term><listitem><para>Boolean contract condition to check. (This is not a variadic macro parameter so any comma it might contain must be protected by round parenthesis and <computeroutput>BOOST_CONTRACT_ASSERT((cond))</computeroutput> will always work.) </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></refsect1></refentry>
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45395000817520"><refmeta><refentrytitle>Macro BOOST_CONTRACT_ASSERT_AUDIT</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_ASSERT_AUDIT</refname><refpurpose>Preferred way to assert contract conditions that are computationally expensive, at least compared to the computational cost of executing the function body. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.assert_hpp">boost/contract/assert.hpp</link>&gt;
 
 </phrase>BOOST_CONTRACT_ASSERT_AUDIT(cond)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>The asserted condition will always be compiled and validated syntactically, but it will not be checked at run-time unless  <computeroutput><link linkend="BOOST_CONTRACT_AUDITS">BOOST_CONTRACT_AUDITS</link></computeroutput> is defined (undefined by default). This macro is defined by code equivalent to:</para><para><programlisting><phrase role="preprocessor">#ifdef</phrase> <phrase role="identifier">BOOST_CONTRACT_AUDITS</phrase>
     <phrase role="preprocessor">#define</phrase> <phrase role="identifier">BOOST_CONTRACT_ASSERT_AUDIT</phrase><phrase role="special">(</phrase><phrase role="identifier">cond</phrase><phrase role="special">)</phrase> \
     <phrase role="preprocessor">#define</phrase> <phrase role="identifier">BOOST_CONTRACT_ASSERT_AUDIT</phrase><phrase role="special">(</phrase><phrase role="identifier">cond</phrase><phrase role="special">)</phrase> \
         <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="keyword">true</phrase> <phrase role="special">||</phrase> <phrase role="identifier">cond</phrase><phrase role="special">)</phrase>
 <phrase role="preprocessor">#endif</phrase>
-</programlisting></para><para> <computeroutput><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput>, <computeroutput><link linkend="BOOST_CO_idm45123871181520">BOOST_CONTRACT_ASSERT_AUDIT</link></computeroutput>, and <computeroutput><link linkend="BOOST_CO_idm45123897980656">BOOST_CONTRACT_ASSERT_AXIOM</link></computeroutput> are the three assertion levels predefined by this library. If there is a need, programmers are free to implement their own assertion levels defining macros similar to the one above.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.extras.assertion_levels"> Assertion Levels</link></para>
+</programlisting></para><para> <computeroutput><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput>, <computeroutput><link linkend="BOOST_CO_idm45395000817520">BOOST_CONTRACT_ASSERT_AUDIT</link></computeroutput>, and <computeroutput><link linkend="BOOST_CO_idm45395027441616">BOOST_CONTRACT_ASSERT_AXIOM</link></computeroutput> are the three assertion levels predefined by this library. If there is a need, programmers are free to implement their own assertion levels defining macros similar to the one above.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.extras.assertion_levels"> Assertion Levels</link>,  <link linkend="boost_contract.extras.no_macros__and_no_variadic_macros_"> No Macros</link></para>
 </para>
 
 </para><variablelist spacing="compact"><?dbhtml 
               list-presentation="table"
             ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                       list-presentation="table"
-                    ?><varlistentry><term><computeroutput>cond</computeroutput></term><listitem><para>Boolean contract condition to check. (This is not a variadic macro parameter so any comma it might contain must be protected by round parenthesis, <computeroutput>BOOST_CONTRACT_ASSERT_AUDIT((cond))</computeroutput> will always work.) </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></refsect1></refentry>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45123897980656"><refmeta><refentrytitle>Macro BOOST_CONTRACT_ASSERT_AXIOM</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_ASSERT_AXIOM</refname><refpurpose>Preferred way to assert contract conditions that are computationally prohibitive, at least compared to the cost of executing the function body. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.assert_hpp">boost/contract/assert.hpp</link>&gt;
+                    ?><varlistentry><term><computeroutput>cond</computeroutput></term><listitem><para>Boolean contract condition to check. (This is not a variadic macro parameter so any comma it might contain must be protected by round parenthesis and <computeroutput>BOOST_CONTRACT_ASSERT_AUDIT((cond))</computeroutput> will always work.) </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></refsect1></refentry>
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45395027441616"><refmeta><refentrytitle>Macro BOOST_CONTRACT_ASSERT_AXIOM</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_ASSERT_AXIOM</refname><refpurpose>Preferred way to document in the code contract conditions that are computationally prohibitive, at least compared to the computational cost of executing the function body. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.assert_hpp">boost/contract/assert.hpp</link>&gt;
 
 </phrase>BOOST_CONTRACT_ASSERT_AXIOM(cond)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>The asserted condition will always be compiled and validated syntactically, but it will never be checked at run-time. This macro is defined by code equivalent to:</para><para><programlisting><phrase role="preprocessor">#define</phrase> <phrase role="identifier">BOOST_CONTRACT_ASSERT_AXIOM</phrase><phrase role="special">(</phrase><phrase role="identifier">cond</phrase><phrase role="special">)</phrase> \
     <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="keyword">true</phrase> <phrase role="special">||</phrase> <phrase role="identifier">cond</phrase><phrase role="special">)</phrase>
-</programlisting></para><para> <computeroutput><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput>, <computeroutput><link linkend="BOOST_CO_idm45123871181520">BOOST_CONTRACT_ASSERT_AUDIT</link></computeroutput>, and  <computeroutput><link linkend="BOOST_CO_idm45123897980656">BOOST_CONTRACT_ASSERT_AXIOM</link></computeroutput> are the three assertion levels predefined by this library. If there is a need, programmers are free to implement their own assertion levels defining macros similar to the one above.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.extras.assertion_levels"> Assertion Levels</link></para>
+</programlisting></para><para> <computeroutput><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput>, <computeroutput><link linkend="BOOST_CO_idm45395000817520">BOOST_CONTRACT_ASSERT_AUDIT</link></computeroutput>, and  <computeroutput><link linkend="BOOST_CO_idm45395027441616">BOOST_CONTRACT_ASSERT_AXIOM</link></computeroutput> are the three assertion levels predefined by this library. If there is a need, programmers are free to implement their own assertion levels defining macros similar to the one above.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.extras.assertion_levels"> Assertion Levels</link>,  <link linkend="boost_contract.extras.no_macros__and_no_variadic_macros_"> No Macros</link></para>
 </para>
 
 </para><variablelist spacing="compact"><?dbhtml 
               list-presentation="table"
             ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                       list-presentation="table"
-                    ?><varlistentry><term><computeroutput>cond</computeroutput></term><listitem><para>Boolean contract condition to check. (This is not a variadic macro parameter so any comma it might contain must be protected by round parenthesis, <computeroutput>BOOST_CONTRACT_ASSERT_AXIOM((cond))</computeroutput> will always work.) </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></refsect1></refentry>
+                    ?><varlistentry><term><computeroutput>cond</computeroutput></term><listitem><para>Boolean contract condition to check. (This is not a variadic macro parameter so any comma it might contain must be protected by round parenthesis and <computeroutput>BOOST_CONTRACT_ASSERT_AXIOM((cond))</computeroutput> will always work.) </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></refsect1></refentry>
 </section>
 <section id="header.boost.contract.base_types_hpp"><title>Header &lt;<ulink url="../../../../boost/contract/base_types.hpp">boost/contract/base_types.hpp</ulink>&gt;</title><para>Specify inheritance form base classes (for subcontracting). </para><synopsis xmlns:xi="http://www.w3.org/2001/XInclude">
 
 <link linkend="BOOST_CONTRACT_BASE_TYPES">BOOST_CONTRACT_BASE_TYPES</link>(...)</synopsis>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CONTRACT_BASE_TYPES"><refmeta><refentrytitle>Macro BOOST_CONTRACT_BASE_TYPES</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_BASE_TYPES</refname><refpurpose>Used to program a <computeroutput>typedef</computeroutput> listing the bases of a derived class. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.base_types_hpp">boost/contract/base_types.hpp</link>&gt;
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CONTRACT_BASE_TYPES"><refmeta><refentrytitle>Macro BOOST_CONTRACT_BASE_TYPES</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_BASE_TYPES</refname><refpurpose>Used to program the <computeroutput>typedef</computeroutput> that lists the bases of a derived class. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.base_types_hpp">boost/contract/base_types.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_BASE_TYPES(...)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>In order to support subcontracting, a derived class that specifies contracts for one or more overriding public function must declare a <computeroutput>typedef</computeroutput> named <computeroutput>base_types</computeroutput> (or <computeroutput><link linkend="BOOST_CO_idm45123870587168">BOOST_CONTRACT_BASES_TYPEDEF</link></computeroutput>) using this macro.</para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase> <phrase role="special">:</phrase>
+</phrase>BOOST_CONTRACT_BASE_TYPES(...)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>In order to support subcontracting, a derived class that specifies contracts for one or more overriding public functions must declare a <computeroutput>typedef</computeroutput> named <computeroutput>base_types</computeroutput> (or <computeroutput><link linkend="BOOST_CO_idm45394999732400">BOOST_CONTRACT_BASES_TYPEDEF</link></computeroutput>) using this macro:</para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase>
     <phrase role="preprocessor">#define</phrase> <phrase role="identifier">BASES</phrase> <phrase role="keyword">public</phrase> <phrase role="identifier">b</phrase><phrase role="special">,</phrase> <phrase role="keyword">protected</phrase> <phrase role="keyword">virtual</phrase> <phrase role="identifier">w1</phrase><phrase role="special">,</phrase> <phrase role="keyword">private</phrase> <phrase role="identifier">w2</phrase>
-    <phrase role="identifier">BASES</phrase>
+    <phrase role="special">:</phrase> <phrase role="identifier">BASES</phrase>
 <phrase role="special">{</phrase>
     <phrase role="keyword">friend</phrase> <phrase role="keyword">class</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">:</phrase><phrase role="identifier">access</phrase><phrase role="special">;</phrase>
 
-    <phrase role="keyword">typedef</phrase> <phrase role="identifier">BOOST_CONTRACT_BASES</phrase><phrase role="special">(</phrase><phrase role="identifier">BASES</phrase><phrase role="special">)</phrase> <phrase role="identifier">base_types</phrase><phrase role="special">;</phrase>
+    <phrase role="keyword">typedef</phrase> <phrase role="identifier">BOOST_CONTRACT_BASE_TYPES</phrase><phrase role="special">(</phrase><phrase role="identifier">BASES</phrase><phrase role="special">)</phrase> <phrase role="identifier">base_types</phrase><phrase role="special">;</phrase>
     <phrase role="preprocessor">#undef</phrase> <phrase role="identifier">BASES</phrase>
 
     <phrase role="special">...</phrase>
 <phrase role="special">}</phrase><phrase role="special">;</phrase>
-</programlisting></para><para>This <computeroutput>typedef</computeroutput> must be <computeroutput>public</computeroutput> if <computeroutput><link linkend="boost.contract.access">boost::contract::access</link></computeroutput> is not used.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.base_classes__subcontracting_"> Base Classes</link></para>
+</programlisting></para><para>This <computeroutput>typedef</computeroutput> must be <computeroutput>public</computeroutput> unless <computeroutput><link linkend="boost.contract.access">boost::contract::access</link></computeroutput> is used.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.base_classes__subcontracting_"> Base Classes</link></para>
 </para>
 
 </para><variablelist spacing="compact"><?dbhtml 
               list-presentation="table"
             ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                       list-presentation="table"
-                    ?><varlistentry><term><computeroutput>...</computeroutput></term><listitem><para>Comma separated list of base classes. Each base must explicitly specify its access specifier <computeroutput>public</computeroutput>, <computeroutput>protected</computeroutput>, or <computeroutput>private</computeroutput>, and also <computeroutput>virtual</computeroutput> when present (this not always required in C++ instead). There is a limit of about 20 maximum bases that can be listed (because of similar limits in Boost.MPL internally used by this library). This is a variadic macro parameter, on compilers that do not support variadic macros, the <computeroutput>typedef</computeroutput> for base classes can be programmed manually without using this macro. </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></refsect1></refentry>
+                    ?><varlistentry><term><computeroutput>...</computeroutput></term><listitem><para>Comma separated list of base classes. Each base must explicitly specify its access specifier <computeroutput>public</computeroutput>, <computeroutput>protected</computeroutput>, or <computeroutput>private</computeroutput>, and also <computeroutput>virtual</computeroutput> when present (this not always required in C++ instead). There is a limit of about 20 maximum bases that can be listed (because of similar limits in Boost.MPL internally used by this library). This is a variadic macro parameter, on compilers that do not support variadic macros, the <computeroutput>typedef</computeroutput> for base classes can be programmed manually without using this macro (see  <link linkend="boost_contract.extras.no_macros__and_no_variadic_macros_"> No Macros</link>). </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></refsect1></refentry>
 </section>
-<section id="header.boost.contract.call_if_hpp"><title>Header &lt;<ulink url="../../../../boost/contract/call_if.hpp">boost/contract/call_if.hpp</ulink>&gt;</title><para>Statically disable compilation and execution of functor calls. </para><para><note><para>This facility allows to emulate C++17 <computeroutput>if constexpr</computeroutput> statements when used together with functor templates (or C++14 generic lambdas). </para>
+<section id="header.boost.contract.call_if_hpp"><title>Header &lt;<ulink url="../../../../boost/contract/call_if.hpp">boost/contract/call_if.hpp</ulink>&gt;</title><para>Statically disable compilation and execution of functor calls. </para><para><note><para>These facilities allow to emulate C++17 <computeroutput>if constexpr</computeroutput> statements when used together with functor templates (and C++14 generic lambdas). Therefore, they are not useful on C++17 compilers where <computeroutput> if constexpr</computeroutput> can be directly used instead. </para>
 </note>
 </para><synopsis xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">namespace</phrase> <phrase role="identifier">boost</phrase> <phrase role="special">{</phrase>
   <phrase role="keyword">namespace</phrase> <phrase role="identifier">contract</phrase> <phrase role="special">{</phrase>
       <phrase role="keyword">struct</phrase> <link linkend="boost.contract.call_if_statement">call_if_statement</link><phrase role="special">;</phrase>
 
     <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Then<phrase role="special">&gt;</phrase> 
-      <phrase role="keyword">struct</phrase> <link linkend="boost.contract.call_if__idm45123870948032">call_if_statement</link><phrase role="special">&lt;</phrase><phrase role="keyword">false</phrase><phrase role="special">,</phrase> <phrase role="identifier">Then</phrase><phrase role="special">,</phrase> <phrase role="identifier">internal_type</phrase><phrase role="special">&gt;</phrase><phrase role="special">;</phrase>
-    <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Then<phrase role="special">&gt;</phrase> <phrase role="keyword">struct</phrase> <link linkend="boost.contract.call_if__idm45123870909024">call_if_statement</link><phrase role="special">&lt;</phrase><phrase role="keyword">true</phrase><phrase role="special">,</phrase> <phrase role="identifier">Then</phrase><phrase role="special">,</phrase> <phrase role="identifier">internal_type</phrase><phrase role="special">&gt;</phrase><phrase role="special">;</phrase>
+      <phrase role="keyword">struct</phrase> <link linkend="boost.contract.call_if__idm45395000098448">call_if_statement</link><phrase role="special">&lt;</phrase><phrase role="keyword">false</phrase><phrase role="special">,</phrase> <phrase role="identifier">Then</phrase><phrase role="special">,</phrase> <phrase role="identifier">internal_type</phrase><phrase role="special">&gt;</phrase><phrase role="special">;</phrase>
+    <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Then<phrase role="special">&gt;</phrase> <phrase role="keyword">struct</phrase> <link linkend="boost.contract.call_if__idm45395000058976">call_if_statement</link><phrase role="special">&lt;</phrase><phrase role="keyword">true</phrase><phrase role="special">,</phrase> <phrase role="identifier">Then</phrase><phrase role="special">,</phrase> <phrase role="identifier">internal_type</phrase><phrase role="special">&gt;</phrase><phrase role="special">;</phrase>
     <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Then<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase> ThenResult<phrase role="special">&gt;</phrase> 
-      <phrase role="keyword">struct</phrase> <link linkend="boost.contract.call_if__idm45123870893360">call_if_statement</link><phrase role="special">&lt;</phrase><phrase role="keyword">true</phrase><phrase role="special">,</phrase> <phrase role="identifier">Then</phrase><phrase role="special">,</phrase> <phrase role="identifier">ThenResult</phrase><phrase role="special">&gt;</phrase><phrase role="special">;</phrase>
-    <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Then<phrase role="special">&gt;</phrase> <phrase role="keyword">struct</phrase> <link linkend="boost.contract.call_if__idm45123870853712">call_if_statement</link><phrase role="special">&lt;</phrase><phrase role="keyword">true</phrase><phrase role="special">,</phrase> <phrase role="identifier">Then</phrase><phrase role="special">,</phrase> <phrase role="keyword">void</phrase><phrase role="special">&gt;</phrase><phrase role="special">;</phrase>
+      <phrase role="keyword">struct</phrase> <link linkend="boost.contract.call_if__idm45395000042848">call_if_statement</link><phrase role="special">&lt;</phrase><phrase role="keyword">true</phrase><phrase role="special">,</phrase> <phrase role="identifier">Then</phrase><phrase role="special">,</phrase> <phrase role="identifier">ThenResult</phrase><phrase role="special">&gt;</phrase><phrase role="special">;</phrase>
+    <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Then<phrase role="special">&gt;</phrase> <phrase role="keyword">struct</phrase> <link linkend="boost.contract.call_if__idm45395000002720">call_if_statement</link><phrase role="special">&lt;</phrase><phrase role="keyword">true</phrase><phrase role="special">,</phrase> <phrase role="identifier">Then</phrase><phrase role="special">,</phrase> <phrase role="keyword">void</phrase><phrase role="special">&gt;</phrase><phrase role="special">;</phrase>
     <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">bool</phrase> Pred<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase> Then<phrase role="special">&gt;</phrase> 
       <link linkend="boost.contract.call_if_statement">call_if_statement</link><phrase role="special">&lt;</phrase> <phrase role="identifier">Pred</phrase><phrase role="special">,</phrase> <phrase role="identifier">Then</phrase> <phrase role="special">&gt;</phrase> <link linkend="boost.contract.call_if_c"><phrase role="identifier">call_if_c</phrase></link><phrase role="special">(</phrase><phrase role="identifier">Then</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
     <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Pred<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase> Then<phrase role="special">&gt;</phrase> 
       <phrase role="keyword">bool</phrase> <link linkend="boost.contract.condition_if"><phrase role="identifier">condition_if</phrase></link><phrase role="special">(</phrase><phrase role="identifier">Then</phrase><phrase role="special">,</phrase> <phrase role="keyword">bool</phrase> <phrase role="special">=</phrase> <phrase role="keyword">true</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
   <phrase role="special">}</phrase>
 <phrase role="special">}</phrase></synopsis>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.call_if_statement"><refmeta><refentrytitle>Struct template call_if_statement</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::call_if_statement</refname><refpurpose>Select compilation and execution of functor template calls using a static boolean predicate. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.call_if_hpp">boost/contract/call_if.hpp</link>&gt;
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.call_if_statement"><refmeta><refentrytitle>Struct template call_if_statement</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::call_if_statement</refname><refpurpose>Select compilation and execution of functor template calls using a static boolean predicate (not needed on C++17 compilers, use <computeroutput>if constexpr</computeroutput> instead). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.call_if_hpp">boost/contract/call_if.hpp</link>&gt;
 
 </phrase><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">bool</phrase> Pred<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase> Then<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase> ThenResult <phrase role="special">=</phrase> <phrase role="identifier">internal_type</phrase><phrase role="special">&gt;</phrase> 
 <phrase role="keyword">struct</phrase> <link linkend="boost.contract.call_if_statement">call_if_statement</link> <phrase role="special">{</phrase>
         Assertion Requirements</link></para>
 </para>
 
-</para><refsect2><title>Template Parameters</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">bool</phrase> Pred</literallayout></para><para><para>Static boolean predicate that selects which functor template call to compile and execute. </para></para></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">typename</phrase> Then</literallayout></para><para><para>Type of the functor template to call if the static predicate <computeroutput>Pred</computeroutput> is <computeroutput>true</computeroutput>. </para></para></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">typename</phrase> ThenResult <phrase role="special">=</phrase> <phrase role="identifier">internal_type</phrase></literallayout></para><para><para>Return type of then-branch functor template call (this is usually automatically deduced by this library so it is never explicitly specified by the user, and that is why it is often marked as <computeroutput>internal_type</computeroutput> in this documentation). </para></para></listitem></orderedlist></refsect2></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.call_if__idm45123870948032"><refmeta><refentrytitle>Struct template call_if_statement&lt;false, Then, internal_type&gt;</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::call_if_statement&lt;false, Then, internal_type&gt;</refname><refpurpose>Template specialization to handle static predicates that are <computeroutput>false</computeroutput>. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.call_if_hpp">boost/contract/call_if.hpp</link>&gt;
+</para><refsect2><title>Template Parameters</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">bool</phrase> Pred</literallayout></para><para><para>Static boolean predicate that selects which functor template call to compile and execute. </para></para></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">typename</phrase> Then</literallayout></para><para><para>Type of the functor template to call if the static predicate <computeroutput>Pred</computeroutput> is <computeroutput>true</computeroutput>. </para></para></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">typename</phrase> ThenResult <phrase role="special">=</phrase> <phrase role="identifier">internal_type</phrase></literallayout></para><para><para>Return type of then-branch functor template call (this is usually automatically deduced by this library so it is never explicitly specified by the user, and that is why it is often marked as <computeroutput>internal_type</computeroutput> in this documentation). </para></para></listitem></orderedlist></refsect2></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.call_if__idm45395000098448"><refmeta><refentrytitle>Struct template call_if_statement&lt;false, Then, internal_type&gt;</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::call_if_statement&lt;false, Then, internal_type&gt;</refname><refpurpose>Template specialization to handle static predicates that are <computeroutput>false</computeroutput> (not needed on C++17 compilers, use <computeroutput>if constexpr</computeroutput> instead). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.call_if_hpp">boost/contract/call_if.hpp</link>&gt;
 
 </phrase><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Then<phrase role="special">&gt;</phrase> 
-<phrase role="keyword">struct</phrase> <link linkend="boost.contract.call_if__idm45123870948032">call_if_statement</link><phrase role="special">&lt;</phrase><phrase role="keyword">false</phrase><phrase role="special">,</phrase> <phrase role="identifier">Then</phrase><phrase role="special">,</phrase> <phrase role="identifier">internal_type</phrase><phrase role="special">&gt;</phrase> <phrase role="special">{</phrase>
-  <phrase role="comment">// <link linkend="boost.contract.call_if__idm45123870948032construct-copy-destruct">construct/copy/destruct</link></phrase>
-  <phrase role="keyword">explicit</phrase> <link linkend="idm45123870913056-bb"><phrase role="identifier">call_if_statement</phrase></link><phrase role="special">(</phrase><phrase role="identifier">Then</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+<phrase role="keyword">struct</phrase> <link linkend="boost.contract.call_if__idm45395000098448">call_if_statement</link><phrase role="special">&lt;</phrase><phrase role="keyword">false</phrase><phrase role="special">,</phrase> <phrase role="identifier">Then</phrase><phrase role="special">,</phrase> <phrase role="identifier">internal_type</phrase><phrase role="special">&gt;</phrase> <phrase role="special">{</phrase>
+  <phrase role="comment">// <link linkend="boost.contract.call_if__idm45395000098448construct-copy-destruct">construct/copy/destruct</link></phrase>
+  <phrase role="keyword">explicit</phrase> <link linkend="idm45395000063008-bb"><phrase role="identifier">call_if_statement</phrase></link><phrase role="special">(</phrase><phrase role="identifier">Then</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
 
-  <phrase role="comment">// <link linkend="idm45123870939664-bb">public member functions</link></phrase>
-  <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Else<phrase role="special">&gt;</phrase> <phrase role="identifier">result_of</phrase><phrase role="special">&lt;</phrase> <phrase role="identifier">Else</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">&gt;</phrase><phrase role="special">::</phrase><phrase role="identifier">type</phrase> <link linkend="idm45123870939104-bb"><phrase role="identifier">else_</phrase></link><phrase role="special">(</phrase><phrase role="identifier">Else</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
+  <phrase role="comment">// <link linkend="idm45395000089616-bb">public member functions</link></phrase>
+  <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Else<phrase role="special">&gt;</phrase> <phrase role="identifier">result_of</phrase><phrase role="special">&lt;</phrase> <phrase role="identifier">Else</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">&gt;</phrase><phrase role="special">::</phrase><phrase role="identifier">type</phrase> <link linkend="idm45395000089056-bb"><phrase role="identifier">else_</phrase></link><phrase role="special">(</phrase><phrase role="identifier">Else</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
   <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">bool</phrase> ElseIfPred<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase> ElseIfThen<phrase role="special">&gt;</phrase> 
-    <link linkend="boost.contract.call_if_statement">call_if_statement</link><phrase role="special">&lt;</phrase> <phrase role="identifier">ElseIfPred</phrase><phrase role="special">,</phrase> <phrase role="identifier">ElseIfThen</phrase> <phrase role="special">&gt;</phrase> <link linkend="idm45123870930448-bb"><phrase role="identifier">else_if_c</phrase></link><phrase role="special">(</phrase><phrase role="identifier">ElseIfThen</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
+    <link linkend="boost.contract.call_if_statement">call_if_statement</link><phrase role="special">&lt;</phrase> <phrase role="identifier">ElseIfPred</phrase><phrase role="special">,</phrase> <phrase role="identifier">ElseIfThen</phrase> <phrase role="special">&gt;</phrase> <link linkend="idm45395000080400-bb"><phrase role="identifier">else_if_c</phrase></link><phrase role="special">(</phrase><phrase role="identifier">ElseIfThen</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
   <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> ElseIfPred<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase> ElseIfThen<phrase role="special">&gt;</phrase> 
     <link linkend="boost.contract.call_if_statement">call_if_statement</link><phrase role="special">&lt;</phrase> <phrase role="identifier">ElseIfPred</phrase><phrase role="special">::</phrase><phrase role="identifier">value</phrase><phrase role="special">,</phrase> <phrase role="identifier">ElseIfThen</phrase> <phrase role="special">&gt;</phrase> 
-    <link linkend="idm45123870921696-bb"><phrase role="identifier">else_if</phrase></link><phrase role="special">(</phrase><phrase role="identifier">ElseIfThen</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
+    <link linkend="idm45395000071648-bb"><phrase role="identifier">else_if</phrase></link><phrase role="special">(</phrase><phrase role="identifier">ElseIfThen</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
 <phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This template specialization handles all else-branch functor template calls (whether they return void or not). Usually this class template is instantiated only via the return value of  <computeroutput><link linkend="boost.contract.call_if">boost::contract::call_if</link></computeroutput> and <computeroutput><link linkend="boost.contract.call_if_c">boost::contract::call_if_c</link></computeroutput>.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.extras.assertion_requirements__templates_">
         Assertion Requirements</link></para>
 </para>
 
-</para><refsect2><title>Template Parameters</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">typename</phrase> Then</literallayout></para><para><para>Type of functor template to call when the static predicate is <computeroutput>true</computeroutput> (never the case for this template specialization). </para></para></listitem></orderedlist></refsect2><refsect2><title><anchor id="boost.contract.call_if__idm45123870948032construct-copy-destruct"/><computeroutput>call_if_statement</computeroutput> 
+</para><refsect2><title>Template Parameters</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">typename</phrase> Then</literallayout></para><para><para>Type of functor template to call when the static predicate is <computeroutput>true</computeroutput> (never the case for this template specialization). </para></para></listitem></orderedlist></refsect2><refsect2><title><anchor id="boost.contract.call_if__idm45395000098448construct-copy-destruct"/><computeroutput>call_if_statement</computeroutput> 
         public
-       construct/copy/destruct</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">explicit</phrase> <anchor id="idm45123870913056-bb"/><phrase role="identifier">call_if_statement</phrase><phrase role="special">(</phrase><phrase role="identifier">Then</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this object with the then-branch functor template. <para>
+       construct/copy/destruct</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">explicit</phrase> <anchor id="idm45395000063008-bb"/><phrase role="identifier">call_if_statement</phrase><phrase role="special">(</phrase><phrase role="identifier">Then</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this object with the then-branch functor template. <para>
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Then-branch nullary functor template. The functor template call <computeroutput>f()</computeroutput> is never compiled and executed for this template specialization (because the if-statement static predicate is <computeroutput>false</computeroutput>). The return type of <computeroutput>f()</computeroutput> must be the same as (or implicitly convertible to) the return type of all other functor template calls specified for this call-if object. </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></listitem></orderedlist></refsect2><refsect2><title><anchor id="idm45123870939664-bb"/><computeroutput>call_if_statement</computeroutput> public member functions</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Else<phrase role="special">&gt;</phrase> <phrase role="identifier">result_of</phrase><phrase role="special">&lt;</phrase> <phrase role="identifier">Else</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">&gt;</phrase><phrase role="special">::</phrase><phrase role="identifier">type</phrase> <anchor id="idm45123870939104-bb"/><phrase role="identifier">else_</phrase><phrase role="special">(</phrase><phrase role="identifier">Else</phrase> f<phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Specify the else-branch functor template. <para><note><para>The <computeroutput>result_of&lt;Else()&gt;::type</computeroutput> expression should be evaluated only when the static predicate is already checked to be <computeroutput>false</computeroutput> (because <computeroutput>Else()</computeroutput> is required to compile only in that case). Thus, this result-of expression is evaluated lazily only in instantiations of this template specialization.</para>
+                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Then-branch nullary functor template. The functor template call <computeroutput>f()</computeroutput> is never compiled or executed for this template specialization (because the if-statement static predicate is <computeroutput>false</computeroutput>). The return type of <computeroutput>f()</computeroutput> must be the same as (or implicitly convertible to) the return type of all other functor template calls specified for this call-if object. </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></listitem></orderedlist></refsect2><refsect2><title><anchor id="idm45395000089616-bb"/><computeroutput>call_if_statement</computeroutput> public member functions</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Else<phrase role="special">&gt;</phrase> <phrase role="identifier">result_of</phrase><phrase role="special">&lt;</phrase> <phrase role="identifier">Else</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">&gt;</phrase><phrase role="special">::</phrase><phrase role="identifier">type</phrase> <anchor id="idm45395000089056-bb"/><phrase role="identifier">else_</phrase><phrase role="special">(</phrase><phrase role="identifier">Else</phrase> f<phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Specify the else-branch functor template. <para><note><para>The <computeroutput>result_of&lt;Else()&gt;::type</computeroutput> expression needs be evaluated only when the static predicate is already checked to be <computeroutput>false</computeroutput> (because <computeroutput>Else()</computeroutput> is required to compile only in that case). Thus, this result-of expression is evaluated lazily and only in instantiations of this template specialization.</para>
 </note>
 
 
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
                 ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Else-branch nullary functor template. The functor template call <computeroutput>f()</computeroutput> is actually compiled and executed for this template specialization (because the if-statement static predicate is <computeroutput>false</computeroutput>). The return type of <computeroutput>f()</computeroutput> must be the same as (or implicitly convertible to) the return type of all other functor template calls specified for this call-if object.</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>A copy of the value returned by the call to the else-branch functor template <computeroutput>f()</computeroutput>. </para></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">bool</phrase> ElseIfPred<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase> ElseIfThen<phrase role="special">&gt;</phrase> 
-  <link linkend="boost.contract.call_if_statement">call_if_statement</link><phrase role="special">&lt;</phrase> <phrase role="identifier">ElseIfPred</phrase><phrase role="special">,</phrase> <phrase role="identifier">ElseIfThen</phrase> <phrase role="special">&gt;</phrase> <anchor id="idm45123870930448-bb"/><phrase role="identifier">else_if_c</phrase><phrase role="special">(</phrase><phrase role="identifier">ElseIfThen</phrase> f<phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Specify an else-if-branch functor template (using a static boolean predicate). <para>
+  <link linkend="boost.contract.call_if_statement">call_if_statement</link><phrase role="special">&lt;</phrase> <phrase role="identifier">ElseIfPred</phrase><phrase role="special">,</phrase> <phrase role="identifier">ElseIfThen</phrase> <phrase role="special">&gt;</phrase> <anchor id="idm45395000080400-bb"/><phrase role="identifier">else_if_c</phrase><phrase role="special">(</phrase><phrase role="identifier">ElseIfThen</phrase> f<phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Specify an else-if-branch functor template (using a static boolean predicate). <para>
 
 
 </para><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
                 ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Else-if-branch nullary functor template. The functor template call <computeroutput>f()</computeroutput> is actually compiled and executed if and only if <computeroutput>ElseIfPred</computeroutput> is <computeroutput>true</computeroutput> (because the if-statement static predicate is already <computeroutput>false</computeroutput> for this template specialization). The return type of <computeroutput>f()</computeroutput> must be the same as (or implicitly convertible to) the return type of all other functor template calls specified for this call-if object.</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Template Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>ElseIfPred</computeroutput></term><listitem><para>Static boolean predicate selecting which functor template call to compile and execute.</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>A call-if statement so the else statement and additional else-if statements can be specified if needed. Eventually, this will be the return value of the functor template call being compiled and executed. </para></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> ElseIfPred<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase> ElseIfThen<phrase role="special">&gt;</phrase> 
+                ?><varlistentry><term><computeroutput>ElseIfPred</computeroutput></term><listitem><para>Static boolean predicate selecting which functor template call to compile and execute.</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>A call-if statement so the else statement and additional else-if statements can be specified if needed. Eventually, this will be the return value of the one functor template call being compiled and executed. </para></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> ElseIfPred<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase> ElseIfThen<phrase role="special">&gt;</phrase> 
   <link linkend="boost.contract.call_if_statement">call_if_statement</link><phrase role="special">&lt;</phrase> <phrase role="identifier">ElseIfPred</phrase><phrase role="special">::</phrase><phrase role="identifier">value</phrase><phrase role="special">,</phrase> <phrase role="identifier">ElseIfThen</phrase> <phrase role="special">&gt;</phrase> 
-  <anchor id="idm45123870921696-bb"/><phrase role="identifier">else_if</phrase><phrase role="special">(</phrase><phrase role="identifier">ElseIfThen</phrase> f<phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Specify an else-if-branch functor template (using a nullary boolen meta-function). <para>
+  <anchor id="idm45395000071648-bb"/><phrase role="identifier">else_if</phrase><phrase role="special">(</phrase><phrase role="identifier">ElseIfThen</phrase> f<phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Specify an else-if-branch functor template (using a nullary boolen meta-function). <para>
 
 
 </para><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
                 ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Else-if-branch nullary functor template. The functor template call <computeroutput>f()</computeroutput> is actually compiled and executed if and only if <computeroutput>ElseIfPred::value</computeroutput> is <computeroutput>true</computeroutput> (because the if-statement static predicate is already <computeroutput>false</computeroutput> for this template specialization). The return type of <computeroutput>f()</computeroutput> must be the same as (or implicitly convertible to) the return type of all other functor template calls specified for this call-if object.</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Template Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>ElseIfPred</computeroutput></term><listitem><para>Nullary boolean meta-function selecting which functor template call to compile and execute.</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>A call-if statement so the else statement and additional else-if statements can be specified if needed. Eventually, this will be the return value of the functor template call being compiled and executed. </para></listitem></varlistentry></variablelist></listitem></orderedlist></refsect2></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.call_if__idm45123870909024"><refmeta><refentrytitle>Struct template call_if_statement&lt;true, Then, internal_type&gt;</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::call_if_statement&lt;true, Then, internal_type&gt;</refname><refpurpose>Template specialization to dispatch between then-branch functor template calls that return void and the ones that return non-void. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.call_if_hpp">boost/contract/call_if.hpp</link>&gt;
+                ?><varlistentry><term><computeroutput>ElseIfPred</computeroutput></term><listitem><para>Nullary boolean meta-function selecting which functor template call to compile and execute.</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>A call-if statement so the else statement and additional else-if statements can be specified if needed. Eventually, this will be the return value of the one functor template call being compiled and executed. </para></listitem></varlistentry></variablelist></listitem></orderedlist></refsect2></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.call_if__idm45395000058976"><refmeta><refentrytitle>Struct template call_if_statement&lt;true, Then, internal_type&gt;</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::call_if_statement&lt;true, Then, internal_type&gt;</refname><refpurpose>Template specialization to dispatch between then-branch functor template calls that return void and the ones that return non-void (not needed on C++17 compilers, use <computeroutput>if constexpr</computeroutput> instead). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.call_if_hpp">boost/contract/call_if.hpp</link>&gt;
 
 </phrase><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Then<phrase role="special">&gt;</phrase> 
-<phrase role="keyword">struct</phrase> <link linkend="boost.contract.call_if__idm45123870909024">call_if_statement</link><phrase role="special">&lt;</phrase><phrase role="keyword">true</phrase><phrase role="special">,</phrase> <phrase role="identifier">Then</phrase><phrase role="special">,</phrase> <phrase role="identifier">internal_type</phrase><phrase role="special">&gt;</phrase> <phrase role="special">:</phrase> <phrase role="keyword">public</phrase> boost::contract::call_if_statement&lt; true, Then, result_of&lt; Then()&gt;::type &gt;
+<phrase role="keyword">struct</phrase> <link linkend="boost.contract.call_if__idm45395000058976">call_if_statement</link><phrase role="special">&lt;</phrase><phrase role="keyword">true</phrase><phrase role="special">,</phrase> <phrase role="identifier">Then</phrase><phrase role="special">,</phrase> <phrase role="identifier">internal_type</phrase><phrase role="special">&gt;</phrase> <phrase role="special">:</phrase> <phrase role="keyword">public</phrase> boost::contract::call_if_statement&lt; true, Then, result_of&lt; Then()&gt;::type &gt;
 <phrase role="special">{</phrase>
-  <phrase role="comment">// <link linkend="boost.contract.call_if__idm45123870909024construct-copy-destruct">construct/copy/destruct</link></phrase>
-  <phrase role="keyword">explicit</phrase> <link linkend="idm45123870897376-bb"><phrase role="identifier">call_if_statement</phrase></link><phrase role="special">(</phrase><phrase role="identifier">Then</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
-<phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>The base class is a call-if statement so the else and else-if statements can be specified if needed. Usually this class template is instantiated only via the return value of  <computeroutput><link linkend="boost.contract.call_if">boost::contract::call_if</link></computeroutput> and <computeroutput><link linkend="boost.contract.call_if_c">boost::contract::call_if_c</link></computeroutput>.</para><para><note><para>The <computeroutput>result_of&lt;Then()&gt;::type</computeroutput> expression should be evaluated only when the static predicate is already checked to be <computeroutput>true</computeroutput> (because <computeroutput>Then()</computeroutput> is required to compile only in that case). Thus, this template specialization introduces an extra level of indirection necessary for proper lazy evaluation of this result-of expression.</para>
+  <phrase role="comment">// <link linkend="boost.contract.call_if__idm45395000058976construct-copy-destruct">construct/copy/destruct</link></phrase>
+  <phrase role="keyword">explicit</phrase> <link linkend="idm45395000046864-bb"><phrase role="identifier">call_if_statement</phrase></link><phrase role="special">(</phrase><phrase role="identifier">Then</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+<phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>The base class is a call-if statement so the else and else-if statements can be specified if needed. Usually this class template is instantiated only via the return value of  <computeroutput><link linkend="boost.contract.call_if">boost::contract::call_if</link></computeroutput> and <computeroutput><link linkend="boost.contract.call_if_c">boost::contract::call_if_c</link></computeroutput>.</para><para><note><para>The <computeroutput>result_of&lt;Then()&gt;::type</computeroutput> expression needs be evaluated only when the static predicate is already checked to be <computeroutput>true</computeroutput> (because <computeroutput>Then()</computeroutput> is required to compile only in that case). Thus, this template specialization introduces an extra level of indirection necessary for proper lazy evaluation of this result-of expression.</para>
 </note>
 <para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.extras.assertion_requirements__templates_">
         Assertion Requirements</link></para>
 </para>
 
-</para><refsect2><title>Template Parameters</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">typename</phrase> Then</literallayout></para><para><para>Type of functor template to call when the static predicate is <computeroutput>true</computeroutput> (as it is for this template specialization). </para></para></listitem></orderedlist></refsect2><refsect2><title><anchor id="boost.contract.call_if__idm45123870909024construct-copy-destruct"/><computeroutput>call_if_statement</computeroutput> 
+</para><refsect2><title>Template Parameters</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">typename</phrase> Then</literallayout></para><para><para>Type of functor template to call when the static predicate is <computeroutput>true</computeroutput> (as it is for this template specialization). </para></para></listitem></orderedlist></refsect2><refsect2><title><anchor id="boost.contract.call_if__idm45395000058976construct-copy-destruct"/><computeroutput>call_if_statement</computeroutput> 
         public
-       construct/copy/destruct</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">explicit</phrase> <anchor id="idm45123870897376-bb"/><phrase role="identifier">call_if_statement</phrase><phrase role="special">(</phrase><phrase role="identifier">Then</phrase> f<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this object with the then-branch functor template. <para>
+       construct/copy/destruct</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">explicit</phrase> <anchor id="idm45395000046864-bb"/><phrase role="identifier">call_if_statement</phrase><phrase role="special">(</phrase><phrase role="identifier">Then</phrase> f<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this object with the then-branch functor template. <para>
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Then-branch nullary functor template. The functor template call <computeroutput>f()</computeroutput> is compiled and called for this template specialization (because the if-statement static predicate is <computeroutput>true</computeroutput>). The return type of <computeroutput>f()</computeroutput> must be the same as (or implicitly convertible to) the return type of all other functor template calls specified for this call-if object. </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></listitem></orderedlist></refsect2></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.call_if__idm45123870893360"><refmeta><refentrytitle>Struct template call_if_statement&lt;true, Then, ThenResult&gt;</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::call_if_statement&lt;true, Then, ThenResult&gt;</refname><refpurpose>Template specialization to handle static predicates that are <computeroutput>true</computeroutput> for then-branch functor template calls that do not return void. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.call_if_hpp">boost/contract/call_if.hpp</link>&gt;
+                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Then-branch nullary functor template. The functor template call <computeroutput>f()</computeroutput> is compiled and called for this template specialization (because the if-statement static predicate is <computeroutput>true</computeroutput>). The return type of <computeroutput>f()</computeroutput> must be the same as (or implicitly convertible to) the return type of all other functor template calls specified for this call-if object. </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></listitem></orderedlist></refsect2></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.call_if__idm45395000042848"><refmeta><refentrytitle>Struct template call_if_statement&lt;true, Then, ThenResult&gt;</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::call_if_statement&lt;true, Then, ThenResult&gt;</refname><refpurpose>Template specialization to handle static predicates that are <computeroutput>true</computeroutput> for then-branch functor template calls that do not return void (not needed on C++17 compilers, use <computeroutput>if constexpr</computeroutput> instead). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.call_if_hpp">boost/contract/call_if.hpp</link>&gt;
 
 </phrase><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Then<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase> ThenResult<phrase role="special">&gt;</phrase> 
-<phrase role="keyword">struct</phrase> <link linkend="boost.contract.call_if__idm45123870893360">call_if_statement</link><phrase role="special">&lt;</phrase><phrase role="keyword">true</phrase><phrase role="special">,</phrase> <phrase role="identifier">Then</phrase><phrase role="special">,</phrase> <phrase role="identifier">ThenResult</phrase><phrase role="special">&gt;</phrase> <phrase role="special">{</phrase>
-  <phrase role="comment">// <link linkend="boost.contract.call_if__idm45123870893360construct-copy-destruct">construct/copy/destruct</link></phrase>
-  <phrase role="keyword">explicit</phrase> <link linkend="idm45123870858112-bb"><phrase role="identifier">call_if_statement</phrase></link><phrase role="special">(</phrase><phrase role="identifier">Then</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+<phrase role="keyword">struct</phrase> <link linkend="boost.contract.call_if__idm45395000042848">call_if_statement</link><phrase role="special">&lt;</phrase><phrase role="keyword">true</phrase><phrase role="special">,</phrase> <phrase role="identifier">Then</phrase><phrase role="special">,</phrase> <phrase role="identifier">ThenResult</phrase><phrase role="special">&gt;</phrase> <phrase role="special">{</phrase>
+  <phrase role="comment">// <link linkend="boost.contract.call_if__idm45395000042848construct-copy-destruct">construct/copy/destruct</link></phrase>
+  <phrase role="keyword">explicit</phrase> <link linkend="idm45395000007120-bb"><phrase role="identifier">call_if_statement</phrase></link><phrase role="special">(</phrase><phrase role="identifier">Then</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
 
-  <phrase role="comment">// <link linkend="idm45123870884032-bb">public member functions</link></phrase>
-  <link linkend="idm45123870883472-bb"><phrase role="keyword">operator</phrase> <phrase role="identifier">ThenResult</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
-  <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Else<phrase role="special">&gt;</phrase> <phrase role="identifier">ThenResult</phrase> <link linkend="idm45123870881968-bb"><phrase role="identifier">else_</phrase></link><phrase role="special">(</phrase><phrase role="identifier">Else</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
+  <phrase role="comment">// <link linkend="idm45395000033040-bb">public member functions</link></phrase>
+  <link linkend="idm45395000032480-bb"><phrase role="keyword">operator</phrase> <phrase role="identifier">ThenResult</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
+  <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Else<phrase role="special">&gt;</phrase> <phrase role="identifier">ThenResult</phrase> <link linkend="idm45395000030976-bb"><phrase role="identifier">else_</phrase></link><phrase role="special">(</phrase><phrase role="identifier">Else</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
   <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">bool</phrase> ElseIfPred<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase> ElseIfThen<phrase role="special">&gt;</phrase> 
     <link linkend="boost.contract.call_if_statement">call_if_statement</link><phrase role="special">&lt;</phrase> <phrase role="keyword">true</phrase><phrase role="special">,</phrase> <phrase role="identifier">Then</phrase><phrase role="special">,</phrase> <phrase role="identifier">ThenResult</phrase> <phrase role="special">&gt;</phrase> 
-    <link linkend="idm45123870875472-bb"><phrase role="identifier">else_if_c</phrase></link><phrase role="special">(</phrase><phrase role="identifier">ElseIfThen</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
+    <link linkend="idm45395000024480-bb"><phrase role="identifier">else_if_c</phrase></link><phrase role="special">(</phrase><phrase role="identifier">ElseIfThen</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
   <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> ElseIfPred<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase> ElseIfThen<phrase role="special">&gt;</phrase> 
     <link linkend="boost.contract.call_if_statement">call_if_statement</link><phrase role="special">&lt;</phrase> <phrase role="keyword">true</phrase><phrase role="special">,</phrase> <phrase role="identifier">Then</phrase><phrase role="special">,</phrase> <phrase role="identifier">ThenResult</phrase> <phrase role="special">&gt;</phrase> 
-    <link linkend="idm45123870866736-bb"><phrase role="identifier">else_if</phrase></link><phrase role="special">(</phrase><phrase role="identifier">ElseIfThen</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
+    <link linkend="idm45395000015744-bb"><phrase role="identifier">else_if</phrase></link><phrase role="special">(</phrase><phrase role="identifier">ElseIfThen</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
 <phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>Usually this class template is instantiated only via the return value of  <computeroutput><link linkend="boost.contract.call_if">boost::contract::call_if</link></computeroutput> and <computeroutput><link linkend="boost.contract.call_if_c">boost::contract::call_if_c</link></computeroutput>.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.extras.assertion_requirements__templates_">
         Assertion Requirements</link></para>
 </para>
 
-</para><refsect2><title>Template Parameters</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">typename</phrase> Then</literallayout></para><para><para>Type of functor template to call when the static predicate is <computeroutput>true</computeroutput> (as it is for this template specialization). </para></para></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">typename</phrase> ThenResult</literallayout></para><para><para>Non-void return type of the then-branch functor template call. </para></para></listitem></orderedlist></refsect2><refsect2><title><anchor id="boost.contract.call_if__idm45123870893360construct-copy-destruct"/><computeroutput>call_if_statement</computeroutput> 
+</para><refsect2><title>Template Parameters</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">typename</phrase> Then</literallayout></para><para><para>Type of functor template to call when the static predicate is <computeroutput>true</computeroutput> (as it is for this template specialization). </para></para></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">typename</phrase> ThenResult</literallayout></para><para><para>Non-void return type of the then-branch functor template call. </para></para></listitem></orderedlist></refsect2><refsect2><title><anchor id="boost.contract.call_if__idm45395000042848construct-copy-destruct"/><computeroutput>call_if_statement</computeroutput> 
         public
-       construct/copy/destruct</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">explicit</phrase> <anchor id="idm45123870858112-bb"/><phrase role="identifier">call_if_statement</phrase><phrase role="special">(</phrase><phrase role="identifier">Then</phrase> f<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this object with the then-branch functor template. <para>
+       construct/copy/destruct</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">explicit</phrase> <anchor id="idm45395000007120-bb"/><phrase role="identifier">call_if_statement</phrase><phrase role="special">(</phrase><phrase role="identifier">Then</phrase> f<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this object with the then-branch functor template. <para>
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Then-branch nullary functor template. The functor template call <computeroutput>f()</computeroutput> is actually compiled and executed for this template specialization (because the if-statement static predicate is <computeroutput>true</computeroutput>). The return type of <computeroutput>f()</computeroutput> must be the same as (or implicitly convertible to) the <computeroutput>ThenResult</computeroutput> type. </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></listitem></orderedlist></refsect2><refsect2><title><anchor id="idm45123870884032-bb"/><computeroutput>call_if_statement</computeroutput> public member functions</title><orderedlist><listitem><para><literallayout class="monospaced"><anchor id="idm45123870883472-bb"/><phrase role="keyword">operator</phrase> <phrase role="identifier">ThenResult</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>This implicit type conversion returns a copy of the value returned by the call to the then-branch functor template. </listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Else<phrase role="special">&gt;</phrase> <phrase role="identifier">ThenResult</phrase> <anchor id="idm45123870881968-bb"/><phrase role="identifier">else_</phrase><phrase role="special">(</phrase><phrase role="identifier">Else</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Specify the else-branch functor template. <para>
+                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Then-branch nullary functor template. The functor template call <computeroutput>f()</computeroutput> is actually compiled and executed for this template specialization (because the if-statement static predicate is <computeroutput>true</computeroutput>). The return type of <computeroutput>f()</computeroutput> must be the same as (or implicitly convertible to) the <computeroutput>ThenResult</computeroutput> type. </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></listitem></orderedlist></refsect2><refsect2><title><anchor id="idm45395000033040-bb"/><computeroutput>call_if_statement</computeroutput> public member functions</title><orderedlist><listitem><para><literallayout class="monospaced"><anchor id="idm45395000032480-bb"/><phrase role="keyword">operator</phrase> <phrase role="identifier">ThenResult</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>This implicit type conversion returns a copy of the value returned by the call to the then-branch functor template. </listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Else<phrase role="special">&gt;</phrase> <phrase role="identifier">ThenResult</phrase> <anchor id="idm45395000030976-bb"/><phrase role="identifier">else_</phrase><phrase role="special">(</phrase><phrase role="identifier">Else</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Specify the else-branch functor template. <para>
 
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Else-branch nullary functor template. The functor template call <computeroutput>f()</computeroutput> is never compiled and executed for this template specialization (because the if-statement static predicate is <computeroutput>true</computeroutput>). The return type of <computeroutput>f()</computeroutput> must be the same as (or implicitly convertible to) the <computeroutput>ThenResult</computeroutput> type.</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>A copy of the value returned by the call to the then-branch functor template (because the else-branch functor template call is not executed). </para></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">bool</phrase> ElseIfPred<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase> ElseIfThen<phrase role="special">&gt;</phrase> 
+                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Else-branch nullary functor template. The functor template call <computeroutput>f()</computeroutput> is never compiled or executed for this template specialization (because the if-statement static predicate is <computeroutput>true</computeroutput>). The return type of <computeroutput>f()</computeroutput> must be the same as (or implicitly convertible to) the <computeroutput>ThenResult</computeroutput> type.</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>A copy of the value returned by the call to the then-branch functor template (because the else-branch functor template call is not executed). </para></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">bool</phrase> ElseIfPred<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase> ElseIfThen<phrase role="special">&gt;</phrase> 
   <link linkend="boost.contract.call_if_statement">call_if_statement</link><phrase role="special">&lt;</phrase> <phrase role="keyword">true</phrase><phrase role="special">,</phrase> <phrase role="identifier">Then</phrase><phrase role="special">,</phrase> <phrase role="identifier">ThenResult</phrase> <phrase role="special">&gt;</phrase> 
-  <anchor id="idm45123870875472-bb"/><phrase role="identifier">else_if_c</phrase><phrase role="special">(</phrase><phrase role="identifier">ElseIfThen</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Specify an else-if-branch functor template (using a static boolean predicate). <para>
+  <anchor id="idm45395000024480-bb"/><phrase role="identifier">else_if_c</phrase><phrase role="special">(</phrase><phrase role="identifier">ElseIfThen</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Specify an else-if-branch functor template (using a static boolean predicate). <para>
 
 
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Else-if-branch nullary functor template. The functor template call <computeroutput>f()</computeroutput> is never compiled and executed for this template specialization (because the if-statement static predicate is <computeroutput>true</computeroutput>). The return type of <computeroutput>f()</computeroutput> must be the same as (or implicitly convertible to) the <computeroutput>ThenResult</computeroutput> type.</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Template Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
+                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Else-if-branch nullary functor template. The functor template call <computeroutput>f()</computeroutput> is never compiled or executed for this template specialization (because the if-statement static predicate is <computeroutput>true</computeroutput>). The return type of <computeroutput>f()</computeroutput> must be the same as (or implicitly convertible to) the <computeroutput>ThenResult</computeroutput> type.</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Template Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
                 ?><varlistentry><term><computeroutput>ElseIfPred</computeroutput></term><listitem><para>Static boolean predicate selecting which functor template call to compile and execute.</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>A call-if statement so the else statement and additional else-if statements can be specified if needed. Eventually, it will be the return value of the then-branch functor template call for this template specialization (because the if-statement static predicate is <computeroutput>true</computeroutput>). </para></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> ElseIfPred<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase> ElseIfThen<phrase role="special">&gt;</phrase> 
   <link linkend="boost.contract.call_if_statement">call_if_statement</link><phrase role="special">&lt;</phrase> <phrase role="keyword">true</phrase><phrase role="special">,</phrase> <phrase role="identifier">Then</phrase><phrase role="special">,</phrase> <phrase role="identifier">ThenResult</phrase> <phrase role="special">&gt;</phrase> 
-  <anchor id="idm45123870866736-bb"/><phrase role="identifier">else_if</phrase><phrase role="special">(</phrase><phrase role="identifier">ElseIfThen</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Specify an else-if-branch functor template (using a nullary boolean meta-function). <para>
+  <anchor id="idm45395000015744-bb"/><phrase role="identifier">else_if</phrase><phrase role="special">(</phrase><phrase role="identifier">ElseIfThen</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Specify an else-if-branch functor template (using a nullary boolean meta-function). <para>
 
 
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Else-if-branch nullary functor template. The functor template call <computeroutput>f()</computeroutput> is never compiled and executed for this template specialization (because the if-statement static predicate is <computeroutput>true</computeroutput>). The return type of <computeroutput>f()</computeroutput> must be the same as (or implicitly convertible to) the <computeroutput>ThenResult</computeroutput> type.</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Template Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
+                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Else-if-branch nullary functor template. The functor template call <computeroutput>f()</computeroutput> is never compiled or executed for this template specialization (because the if-statement static predicate is <computeroutput>true</computeroutput>). The return type of <computeroutput>f()</computeroutput> must be the same as (or implicitly convertible to) the <computeroutput>ThenResult</computeroutput> type.</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Template Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>ElseIfPred</computeroutput></term><listitem><para>Nullary boolean meta-function selecting which functor template call to compile and execute.</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>A call-if statement so the else statement and additional else-if statements can be specified if needed. Eventually, it will be the return value of the then-branch functor template call for this template specialization (because the if-statement static predicate is <computeroutput>true</computeroutput>). </para></listitem></varlistentry></variablelist></listitem></orderedlist></refsect2></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.call_if__idm45123870853712"><refmeta><refentrytitle>Struct template call_if_statement&lt;true, Then, void&gt;</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::call_if_statement&lt;true, Then, void&gt;</refname><refpurpose>Template specialization to handle static predicates that are <computeroutput>true</computeroutput> for then-branch functor template calls that return void. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.call_if_hpp">boost/contract/call_if.hpp</link>&gt;
+                ?><varlistentry><term><computeroutput>ElseIfPred</computeroutput></term><listitem><para>Nullary boolean meta-function selecting which functor template call to compile and execute.</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>A call-if statement so the else statement and additional else-if statements can be specified if needed. Eventually, it will be the return value of the then-branch functor template call for this template specialization (because the if-statement static predicate is <computeroutput>true</computeroutput>). </para></listitem></varlistentry></variablelist></listitem></orderedlist></refsect2></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.call_if__idm45395000002720"><refmeta><refentrytitle>Struct template call_if_statement&lt;true, Then, void&gt;</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::call_if_statement&lt;true, Then, void&gt;</refname><refpurpose>Template specialization to handle static predicates that are <computeroutput>true</computeroutput> for then-branch functor template calls that return void (not needed on C++17 compilers, use <computeroutput>if constexpr</computeroutput> instead). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.call_if_hpp">boost/contract/call_if.hpp</link>&gt;
 
 </phrase><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Then<phrase role="special">&gt;</phrase> 
-<phrase role="keyword">struct</phrase> <link linkend="boost.contract.call_if__idm45123870853712">call_if_statement</link><phrase role="special">&lt;</phrase><phrase role="keyword">true</phrase><phrase role="special">,</phrase> <phrase role="identifier">Then</phrase><phrase role="special">,</phrase> <phrase role="keyword">void</phrase><phrase role="special">&gt;</phrase> <phrase role="special">{</phrase>
-  <phrase role="comment">// <link linkend="boost.contract.call_if__idm45123870853712construct-copy-destruct">construct/copy/destruct</link></phrase>
-  <phrase role="keyword">explicit</phrase> <link linkend="idm45123870822624-bb"><phrase role="identifier">call_if_statement</phrase></link><phrase role="special">(</phrase><phrase role="identifier">Then</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+<phrase role="keyword">struct</phrase> <link linkend="boost.contract.call_if__idm45395000002720">call_if_statement</link><phrase role="special">&lt;</phrase><phrase role="keyword">true</phrase><phrase role="special">,</phrase> <phrase role="identifier">Then</phrase><phrase role="special">,</phrase> <phrase role="keyword">void</phrase><phrase role="special">&gt;</phrase> <phrase role="special">{</phrase>
+  <phrase role="comment">// <link linkend="boost.contract.call_if__idm45395000002720construct-copy-destruct">construct/copy/destruct</link></phrase>
+  <phrase role="keyword">explicit</phrase> <link linkend="idm45394999971152-bb"><phrase role="identifier">call_if_statement</phrase></link><phrase role="special">(</phrase><phrase role="identifier">Then</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
 
-  <phrase role="comment">// <link linkend="idm45123870845408-bb">public member functions</link></phrase>
-  <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Else<phrase role="special">&gt;</phrase> <phrase role="keyword">void</phrase> <link linkend="idm45123870844848-bb"><phrase role="identifier">else_</phrase></link><phrase role="special">(</phrase><phrase role="identifier">Else</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
+  <phrase role="comment">// <link linkend="idm45394999993936-bb">public member functions</link></phrase>
+  <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Else<phrase role="special">&gt;</phrase> <phrase role="keyword">void</phrase> <link linkend="idm45394999993376-bb"><phrase role="identifier">else_</phrase></link><phrase role="special">(</phrase><phrase role="identifier">Else</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
   <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">bool</phrase> ElseIfPred<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase> ElseIfThen<phrase role="special">&gt;</phrase> 
-    <link linkend="boost.contract.call_if_statement">call_if_statement</link><phrase role="special">&lt;</phrase> <phrase role="keyword">true</phrase><phrase role="special">,</phrase> <phrase role="identifier">Then</phrase><phrase role="special">,</phrase> <phrase role="keyword">void</phrase> <phrase role="special">&gt;</phrase> <link linkend="idm45123870839024-bb"><phrase role="identifier">else_if_c</phrase></link><phrase role="special">(</phrase><phrase role="identifier">ElseIfThen</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
+    <link linkend="boost.contract.call_if_statement">call_if_statement</link><phrase role="special">&lt;</phrase> <phrase role="keyword">true</phrase><phrase role="special">,</phrase> <phrase role="identifier">Then</phrase><phrase role="special">,</phrase> <phrase role="keyword">void</phrase> <phrase role="special">&gt;</phrase> <link linkend="idm45394999987552-bb"><phrase role="identifier">else_if_c</phrase></link><phrase role="special">(</phrase><phrase role="identifier">ElseIfThen</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
   <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> ElseIfPred<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase> ElseIfThen<phrase role="special">&gt;</phrase> 
-    <link linkend="boost.contract.call_if_statement">call_if_statement</link><phrase role="special">&lt;</phrase> <phrase role="keyword">true</phrase><phrase role="special">,</phrase> <phrase role="identifier">Then</phrase><phrase role="special">,</phrase> <phrase role="keyword">void</phrase> <phrase role="special">&gt;</phrase> <link linkend="idm45123870830768-bb"><phrase role="identifier">else_if</phrase></link><phrase role="special">(</phrase><phrase role="identifier">ElseIfThen</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
+    <link linkend="boost.contract.call_if_statement">call_if_statement</link><phrase role="special">&lt;</phrase> <phrase role="keyword">true</phrase><phrase role="special">,</phrase> <phrase role="identifier">Then</phrase><phrase role="special">,</phrase> <phrase role="keyword">void</phrase> <phrase role="special">&gt;</phrase> <link linkend="idm45394999979296-bb"><phrase role="identifier">else_if</phrase></link><phrase role="special">(</phrase><phrase role="identifier">ElseIfThen</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
 <phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>Usually this class template is instantiated only via the return value of  <computeroutput><link linkend="boost.contract.call_if">boost::contract::call_if</link></computeroutput> and <computeroutput><link linkend="boost.contract.call_if_c">boost::contract::call_if_c</link></computeroutput>.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.extras.assertion_requirements__templates_">
         Assertion Requirements</link></para>
 </para>
 
-</para><refsect2><title>Template Parameters</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">typename</phrase> Then</literallayout></para><para><para>Type of functor template to call when the static predicate if <computeroutput>true</computeroutput> (as it is for this template specialization). </para></para></listitem></orderedlist></refsect2><refsect2><title><anchor id="boost.contract.call_if__idm45123870853712construct-copy-destruct"/><computeroutput>call_if_statement</computeroutput> 
+</para><refsect2><title>Template Parameters</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">typename</phrase> Then</literallayout></para><para><para>Type of functor template to call when the static predicate if <computeroutput>true</computeroutput> (as it is for this template specialization). </para></para></listitem></orderedlist></refsect2><refsect2><title><anchor id="boost.contract.call_if__idm45395000002720construct-copy-destruct"/><computeroutput>call_if_statement</computeroutput> 
         public
-       construct/copy/destruct</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">explicit</phrase> <anchor id="idm45123870822624-bb"/><phrase role="identifier">call_if_statement</phrase><phrase role="special">(</phrase><phrase role="identifier">Then</phrase> f<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this object with the then-branch functor template. <para>
+       construct/copy/destruct</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">explicit</phrase> <anchor id="idm45394999971152-bb"/><phrase role="identifier">call_if_statement</phrase><phrase role="special">(</phrase><phrase role="identifier">Then</phrase> f<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this object with the then-branch functor template. <para>
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Then-branch nullary functor template. The functor template call <computeroutput>f()</computeroutput> is actually compiled and executed for this template specialization (because the if-statement static predicate is <computeroutput>true</computeroutput>). The return type of <computeroutput>f()</computeroutput> must be <computeroutput>void</computeroutput> for this template specialization (because the then-branch functor template calls return void). </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></listitem></orderedlist></refsect2><refsect2><title><anchor id="idm45123870845408-bb"/><computeroutput>call_if_statement</computeroutput> public member functions</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Else<phrase role="special">&gt;</phrase> <phrase role="keyword">void</phrase> <anchor id="idm45123870844848-bb"/><phrase role="identifier">else_</phrase><phrase role="special">(</phrase><phrase role="identifier">Else</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Specify the else-branch functor template. <para>
+                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Then-branch nullary functor template. The functor template call <computeroutput>f()</computeroutput> is actually compiled and executed for this template specialization (because the if-statement static predicate is <computeroutput>true</computeroutput>). The return type of <computeroutput>f()</computeroutput> must be <computeroutput>void</computeroutput> for this template specialization (because the then-branch functor template calls return void). </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></listitem></orderedlist></refsect2><refsect2><title><anchor id="idm45394999993936-bb"/><computeroutput>call_if_statement</computeroutput> public member functions</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Else<phrase role="special">&gt;</phrase> <phrase role="keyword">void</phrase> <anchor id="idm45394999993376-bb"/><phrase role="identifier">else_</phrase><phrase role="special">(</phrase><phrase role="identifier">Else</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Specify the else-branch functor template. <para>
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Else-branch nullary functor template. The functor template call <computeroutput>f()</computeroutput> is never compiled and executed for this template specialization (because the if-statement static predicate is <computeroutput>true</computeroutput>). The return type of <computeroutput>f()</computeroutput> must be <computeroutput>void</computeroutput> for this template specialization (because the then-branch functor template calls return void). </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">bool</phrase> ElseIfPred<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase> ElseIfThen<phrase role="special">&gt;</phrase> 
-  <link linkend="boost.contract.call_if_statement">call_if_statement</link><phrase role="special">&lt;</phrase> <phrase role="keyword">true</phrase><phrase role="special">,</phrase> <phrase role="identifier">Then</phrase><phrase role="special">,</phrase> <phrase role="keyword">void</phrase> <phrase role="special">&gt;</phrase> <anchor id="idm45123870839024-bb"/><phrase role="identifier">else_if_c</phrase><phrase role="special">(</phrase><phrase role="identifier">ElseIfThen</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Specify an else-if-branch functor template (using a static boolean predicate). <para>
+                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Else-branch nullary functor template. The functor template call <computeroutput>f()</computeroutput> is never compiled or executed for this template specialization (because the if-statement static predicate is <computeroutput>true</computeroutput>). The return type of <computeroutput>f()</computeroutput> must be <computeroutput>void</computeroutput> for this template specialization (because the then-branch functor template calls return void). </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">bool</phrase> ElseIfPred<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase> ElseIfThen<phrase role="special">&gt;</phrase> 
+  <link linkend="boost.contract.call_if_statement">call_if_statement</link><phrase role="special">&lt;</phrase> <phrase role="keyword">true</phrase><phrase role="special">,</phrase> <phrase role="identifier">Then</phrase><phrase role="special">,</phrase> <phrase role="keyword">void</phrase> <phrase role="special">&gt;</phrase> <anchor id="idm45394999987552-bb"/><phrase role="identifier">else_if_c</phrase><phrase role="special">(</phrase><phrase role="identifier">ElseIfThen</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Specify an else-if-branch functor template (using a static boolean predicate). <para>
 
 
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Else-if-branch nullary functor template. The functor template call <computeroutput>f()</computeroutput> is never compiled and executed for this template specialization (because the if-statement static predicate is <computeroutput>true</computeroutput>). The return type of <computeroutput>f()</computeroutput> must be <computeroutput>void</computeroutput> for this template specialization (because the then-branch functor template calls return void).</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Template Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
+                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Else-if-branch nullary functor template. The functor template call <computeroutput>f()</computeroutput> is never compiled or executed for this template specialization (because the if-statement static predicate is <computeroutput>true</computeroutput>). The return type of <computeroutput>f()</computeroutput> must be <computeroutput>void</computeroutput> for this template specialization (because the then-branch functor template calls return void).</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Template Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
                 ?><varlistentry><term><computeroutput>ElseIfPred</computeroutput></term><listitem><para>Static boolean predicate selecting which functor template call to compile and execute.</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>A call-if statement so the else statement and additional else-if statements can be specified if needed. Eventually, it will return void for this template specialization (because the then-branch functor template calls return void). </para></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> ElseIfPred<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase> ElseIfThen<phrase role="special">&gt;</phrase> 
-  <link linkend="boost.contract.call_if_statement">call_if_statement</link><phrase role="special">&lt;</phrase> <phrase role="keyword">true</phrase><phrase role="special">,</phrase> <phrase role="identifier">Then</phrase><phrase role="special">,</phrase> <phrase role="keyword">void</phrase> <phrase role="special">&gt;</phrase> <anchor id="idm45123870830768-bb"/><phrase role="identifier">else_if</phrase><phrase role="special">(</phrase><phrase role="identifier">ElseIfThen</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Specify an else-if-branch functor template (using a nullary boolean meta-function). <para>
+  <link linkend="boost.contract.call_if_statement">call_if_statement</link><phrase role="special">&lt;</phrase> <phrase role="keyword">true</phrase><phrase role="special">,</phrase> <phrase role="identifier">Then</phrase><phrase role="special">,</phrase> <phrase role="keyword">void</phrase> <phrase role="special">&gt;</phrase> <anchor id="idm45394999979296-bb"/><phrase role="identifier">else_if</phrase><phrase role="special">(</phrase><phrase role="identifier">ElseIfThen</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Specify an else-if-branch functor template (using a nullary boolean meta-function). <para>
 
 
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Else-if-branch nullary functor template. The functor template call <computeroutput>f()</computeroutput> is never compiled and executed for this template specialization (because the if-statement static predicate is <computeroutput>true</computeroutput>). The return type of <computeroutput>f()</computeroutput> must be <computeroutput>void</computeroutput> for this template specialization (because the then-branch functor template calls return void).</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Template Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
+                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Else-if-branch nullary functor template. The functor template call <computeroutput>f()</computeroutput> is never compiled or executed for this template specialization (because the if-statement static predicate is <computeroutput>true</computeroutput>). The return type of <computeroutput>f()</computeroutput> must be <computeroutput>void</computeroutput> for this template specialization (because the then-branch functor template calls return void).</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Template Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>ElseIfPred</computeroutput></term><listitem><para>Nullary boolean meta-function selecting which functor template call to compile and execute.</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>A call-if statement so the else statement and additional else-if statements can be specified if needed. Eventually, it will return void for this template specialization (because the then-branch functor template calls return void). </para></listitem></varlistentry></variablelist></listitem></orderedlist></refsect2></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.call_if_c"><refmeta><refentrytitle>Function template call_if_c</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::call_if_c</refname><refpurpose>Select compilation and execution of functor template calls using a static boolean predicate. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.call_if_hpp">boost/contract/call_if.hpp</link>&gt;
+                ?><varlistentry><term><computeroutput>ElseIfPred</computeroutput></term><listitem><para>Nullary boolean meta-function selecting which functor template call to compile and execute.</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>A call-if statement so the else statement and additional else-if statements can be specified if needed. Eventually, it will return void for this template specialization (because the then-branch functor template calls return void). </para></listitem></varlistentry></variablelist></listitem></orderedlist></refsect2></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.call_if_c"><refmeta><refentrytitle>Function template call_if_c</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::call_if_c</refname><refpurpose>Select compilation and execution of functor template calls using a static boolean predicate (not needed on C++17 compilers, use <computeroutput>if constexpr</computeroutput> instead). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.call_if_hpp">boost/contract/call_if.hpp</link>&gt;
 
 </phrase>
 <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">bool</phrase> Pred<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase> Then<phrase role="special">&gt;</phrase> 
                   list-presentation="table"
                 ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Then-branch nullary functor template. The functor template call <computeroutput>f()</computeroutput> is compiled and executed if and only if <computeroutput>Pred</computeroutput> is <computeroutput>true</computeroutput>. The return type of other functor template calls specified for this call-if statement (else-branch, else-if-branches, etc.) must be the same as (or implicitly convertible to) the return type of then-branch functor call <computeroutput>f()</computeroutput>.</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Template Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>Pred</computeroutput></term><listitem><para>Static boolean predicate selecting which functor template call to compile and execute.</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>A call-if statement so else and else-if statements can be specified if needed. Eventually, this will be the return value of the functor template call being compiled and executed (which can also be <computeroutput>void</computeroutput>). </para></listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.call_if"><refmeta><refentrytitle>Function template call_if</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::call_if</refname><refpurpose>Select compilation and execution of functor template calls using a nullary boolean meta-function. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.call_if_hpp">boost/contract/call_if.hpp</link>&gt;
+                ?><varlistentry><term><computeroutput>Pred</computeroutput></term><listitem><para>Static boolean predicate selecting which functor template call to compile and execute.</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>A call-if statement so else and else-if statements can be specified if needed. Eventually, this will be the return value of the one functor template call being compiled and executed (which could also be <computeroutput>void</computeroutput>). </para></listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.call_if"><refmeta><refentrytitle>Function template call_if</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::call_if</refname><refpurpose>Select compilation and execution of functor template calls using a nullary boolean meta-function (not needed on C++17 compilers, use <computeroutput>if constexpr</computeroutput> instead). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.call_if_hpp">boost/contract/call_if.hpp</link>&gt;
 
 </phrase>
 <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Pred<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase> Then<phrase role="special">&gt;</phrase> 
                   list-presentation="table"
                 ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Then-branch nullary functor template. The functor template call <computeroutput>f()</computeroutput> is compiled and executed if and only if <computeroutput>Pred::value</computeroutput> is <computeroutput>true</computeroutput>. The return type of other functor template calls specified for this call-if statement (else-branch, else-if-branches, etc.) must be the same as (or implicitly convertible to) the return type of then-branch functor template call <computeroutput>f()</computeroutput>.</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Template Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>Pred</computeroutput></term><listitem><para>Nullary boolean meta-function selecting which functor template call to compile and execute.</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>A call-if statement so else and else-if statements can be specified if needed. Eventually, this will be the return value of the functor template call being compiled and executed (which can also be <computeroutput>void</computeroutput>). </para></listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.condition_if_c"><refmeta><refentrytitle>Function template condition_if_c</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::condition_if_c</refname><refpurpose>Select compilation and execution of a boolean functor template condition using a static boolean predicate. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.call_if_hpp">boost/contract/call_if.hpp</link>&gt;
+                ?><varlistentry><term><computeroutput>Pred</computeroutput></term><listitem><para>Nullary boolean meta-function selecting which functor template call to compile and execute.</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>A call-if statement so else and else-if statements can be specified if needed. Eventually, this will be the return value of the one functor template call being compiled and executed (which could also be <computeroutput>void</computeroutput>). </para></listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.condition_if_c"><refmeta><refentrytitle>Function template condition_if_c</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::condition_if_c</refname><refpurpose>Select compilation and execution of a boolean functor template condition using a static boolean predicate (not needed on C++17 compilers, use <computeroutput>if constexpr</computeroutput> instead). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.call_if_hpp">boost/contract/call_if.hpp</link>&gt;
 
 </phrase>
 <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">bool</phrase> Pred<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase> Then<phrase role="special">&gt;</phrase> 
-  <phrase role="keyword">bool</phrase> <phrase role="identifier">condition_if_c</phrase><phrase role="special">(</phrase><phrase role="identifier">Then</phrase> f<phrase role="special">,</phrase> <phrase role="keyword">bool</phrase> else_ <phrase role="special">=</phrase> <phrase role="keyword">true</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>Compile and execute the nullary boolean functor template call <computeroutput>f()</computeroutput> if and only if the specified static boolean predicate <computeroutput>Pred</computeroutput> is <computeroutput>true</computeroutput>, otherwise trivially return <computeroutput>else_</computeroutput> (<computeroutput>true</computeroutput> by default) at run-time.</para><para>A call to <computeroutput>boost::contract::condition_if_c&lt;Pred&gt;(f, else_)</computeroutput> is logically equivalent to <computeroutput>boost::contract::call_if_c&lt;Pred&gt;(f, [else_] { return else_; })</computeroutput> (but its internal implementation is optimized and it does not actually use <computeroutput>call_if_c</computeroutput>).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.extras.assertion_requirements__templates_">
+  <phrase role="keyword">bool</phrase> <phrase role="identifier">condition_if_c</phrase><phrase role="special">(</phrase><phrase role="identifier">Then</phrase> f<phrase role="special">,</phrase> <phrase role="keyword">bool</phrase> else_ <phrase role="special">=</phrase> <phrase role="keyword">true</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>Compile and execute the nullary boolean functor template call <computeroutput>f()</computeroutput> if and only if the specified static boolean predicate <computeroutput>Pred</computeroutput> is <computeroutput>true</computeroutput>, otherwise trivially return <computeroutput>else_</computeroutput> (<computeroutput>true</computeroutput> by default) at run-time.</para><para>A call to <computeroutput>boost::contract::condition_if_c&lt;Pred&gt;(f, else_)</computeroutput> is logically equivalent to <computeroutput>boost::contract::call_if_c&lt;Pred&gt;(f, [] { return else_; })</computeroutput> (but its internal implementation is optimized and it does not actually use <computeroutput>call_if_c</computeroutput>).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.extras.assertion_requirements__templates_">
         Assertion Requirements</link></para>
 </para>
 
                   list-presentation="table"
                 ?><varlistentry><term><computeroutput>else_</computeroutput></term><listitem><para>Boolean value to return when <computeroutput>Pred</computeroutput> is <computeroutput>false</computeroutput> (instead of compiling and executing the functor template call <computeroutput>f()</computeroutput>).</para></listitem></varlistentry><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Nullary boolean functor template. The functor template call <computeroutput>f()</computeroutput> is compiled and executed if and only if <computeroutput>Pred</computeroutput> is <computeroutput>true</computeroutput>.</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Template Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>Pred</computeroutput></term><listitem><para>Static boolean predicate selecting when the functor template call <computeroutput>f()</computeroutput> should be compiled and executed. </para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>Boolean value returned by <computeroutput>f()</computeroutput> if the static predicate <computeroutput>Pred</computeroutput> is <computeroutput>true</computeroutput>. Otherwise, trivially return <computeroutput>else_</computeroutput>. </para></listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.condition_if"><refmeta><refentrytitle>Function template condition_if</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::condition_if</refname><refpurpose>Select compilation and execution of a boolean functor template condition using a nullary boolean meta-function. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.call_if_hpp">boost/contract/call_if.hpp</link>&gt;
+                ?><varlistentry><term><computeroutput>Pred</computeroutput></term><listitem><para>Static boolean predicate selecting when the functor template call <computeroutput>f()</computeroutput> should be compiled and executed. </para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>Boolean value returned by <computeroutput>f()</computeroutput> if the static predicate <computeroutput>Pred</computeroutput> is <computeroutput>true</computeroutput>. Otherwise, trivially return <computeroutput>else_</computeroutput>. </para></listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.condition_if"><refmeta><refentrytitle>Function template condition_if</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::condition_if</refname><refpurpose>Select compilation and execution of a boolean functor template condition using a nullary boolean meta-function (not needed on C++17 compilers, use <computeroutput>if constexpr</computeroutput> instead). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.call_if_hpp">boost/contract/call_if.hpp</link>&gt;
 
 </phrase>
 <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Pred<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase> Then<phrase role="special">&gt;</phrase> 
-  <phrase role="keyword">bool</phrase> <phrase role="identifier">condition_if</phrase><phrase role="special">(</phrase><phrase role="identifier">Then</phrase> f<phrase role="special">,</phrase> <phrase role="keyword">bool</phrase> else_ <phrase role="special">=</phrase> <phrase role="keyword">true</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is equivalent to <computeroutput>boost::contract::condition_if_c&lt;Pred::value&gt;(f, else_)</computeroutput>. Compile and execute the nullary boolean functor template call <computeroutput>f()</computeroutput> if and only if the specified nullary boolean meta-function <computeroutput>Pred</computeroutput> is <computeroutput>true</computeroutput>, otherwise trivially return <computeroutput>else_</computeroutput> (<computeroutput>true</computeroutput> by default) at run-time.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.extras.assertion_requirements__templates_">
+  <phrase role="keyword">bool</phrase> <phrase role="identifier">condition_if</phrase><phrase role="special">(</phrase><phrase role="identifier">Then</phrase> f<phrase role="special">,</phrase> <phrase role="keyword">bool</phrase> else_ <phrase role="special">=</phrase> <phrase role="keyword">true</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is equivalent to <computeroutput>boost::contract::condition_if_c&lt;Pred::value&gt;(f, else_)</computeroutput>. Compile and execute the nullary boolean functor template call <computeroutput>f()</computeroutput> if and only if the specified nullary boolean meta-function <computeroutput>Pred::value</computeroutput> is <computeroutput>true</computeroutput>, otherwise trivially return <computeroutput>else_</computeroutput> (<computeroutput>true</computeroutput> by default) at run-time.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.extras.assertion_requirements__templates_">
         Assertion Requirements</link></para>
 </para>
 
                   list-presentation="table"
                 ?><varlistentry><term><computeroutput>else_</computeroutput></term><listitem><para>Boolean value to return when <computeroutput>Pred::value</computeroutput> is <computeroutput>false</computeroutput> (instead of compiling and executing the functor template call <computeroutput>f()</computeroutput>).</para></listitem></varlistentry><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Nullary boolean functor template. The functor template call <computeroutput>f()</computeroutput> is compiled and executed if and only if <computeroutput>Pred::value</computeroutput> is <computeroutput>true</computeroutput>. </para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Template Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>Pred</computeroutput></term><listitem><para>Nullary boolean meta-function selecting when the functor template call <computeroutput>f()</computeroutput> should be compiled and executed.</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>Boolean value returned by <computeroutput>f()</computeroutput> if the static predicate <computeroutput>Pred</computeroutput> is <computeroutput>true</computeroutput>. Otherwise, trivially return <computeroutput>else_</computeroutput>. </para></listitem></varlistentry></variablelist></refsect1></refentry>
+                ?><varlistentry><term><computeroutput>Pred</computeroutput></term><listitem><para>Nullary boolean meta-function selecting when the functor template call <computeroutput>f()</computeroutput> should be compiled and executed.</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>Boolean value returned by <computeroutput>f()</computeroutput> if the static predicate <computeroutput>Pred::value</computeroutput> is <computeroutput>true</computeroutput>. Otherwise, trivially return <computeroutput>else_</computeroutput>. </para></listitem></varlistentry></variablelist></refsect1></refentry>
 </section>
 <section id="header.boost.contract.check_hpp"><title>Header &lt;<ulink url="../../../../boost/contract/check.hpp">boost/contract/check.hpp</ulink>&gt;</title><para>RAII object that checks contracts. </para><synopsis xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">namespace</phrase> <phrase role="identifier">boost</phrase> <phrase role="special">{</phrase>
   <phrase role="keyword">namespace</phrase> <phrase role="identifier">contract</phrase> <phrase role="special">{</phrase>
 <phrase role="keyword">class</phrase> <link linkend="boost.contract.check">check</link> <phrase role="special">{</phrase>
 <phrase role="keyword">public</phrase><phrase role="special">:</phrase>
   <phrase role="comment">// <link linkend="boost.contract.checkconstruct-copy-destruct">construct/copy/destruct</link></phrase>
-  <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> <link linkend="idm45123870741424-bb"><phrase role="identifier">check</phrase></link><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
-  <link linkend="idm45123870734048-bb"><phrase role="identifier">check</phrase></link><phrase role="special">(</phrase><link linkend="boost.contract.check">check</link> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+  <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> <link linkend="idm45394999887520-bb"><phrase role="identifier">check</phrase></link><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+  <link linkend="idm45394999880144-bb"><phrase role="identifier">check</phrase></link><phrase role="special">(</phrase><link linkend="boost.contract.check">check</link> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
   <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> VirtualResult<phrase role="special">&gt;</phrase> 
-    <link linkend="idm45123870731152-bb"><phrase role="identifier">check</phrase></link><phrase role="special">(</phrase><link linkend="boost.contract.specify__idm45123870039968">specify_precondition_old_postcondition_except</link><phrase role="special">&lt;</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&gt;</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+    <link linkend="idm45394999877248-bb"><phrase role="identifier">check</phrase></link><phrase role="special">(</phrase><link linkend="boost.contract.specify__idm45394999179040">specify_precondition_old_postcondition_except</link><phrase role="special">&lt;</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&gt;</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
   <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> VirtualResult<phrase role="special">&gt;</phrase> 
-    <link linkend="idm45123870722000-bb"><phrase role="identifier">check</phrase></link><phrase role="special">(</phrase><link linkend="boost.contract.specify__idm45123870103104">specify_old_postcondition_except</link><phrase role="special">&lt;</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&gt;</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+    <link linkend="idm45394999867968-bb"><phrase role="identifier">check</phrase></link><phrase role="special">(</phrase><link linkend="boost.contract.specify__idm45394999245856">specify_old_postcondition_except</link><phrase role="special">&lt;</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&gt;</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
   <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> VirtualResult<phrase role="special">&gt;</phrase> 
-    <link linkend="idm45123870711072-bb"><phrase role="identifier">check</phrase></link><phrase role="special">(</phrase><link linkend="boost.contract.specify__idm45123870066880">specify_postcondition_except</link><phrase role="special">&lt;</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&gt;</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
-  <link linkend="idm45123870700112-bb"><phrase role="identifier">check</phrase></link><phrase role="special">(</phrase><link linkend="boost.contract.specify_except">specify_except</link> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
-  <link linkend="idm45123870690944-bb"><phrase role="identifier">check</phrase></link><phrase role="special">(</phrase><link linkend="boost.contract.specify_nothing">specify_nothing</link> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
-  <link linkend="idm45123870681760-bb"><phrase role="special">~</phrase><phrase role="identifier">check</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+    <link linkend="idm45394999856928-bb"><phrase role="identifier">check</phrase></link><phrase role="special">(</phrase><link linkend="boost.contract.specify__idm45394999207792">specify_postcondition_except</link><phrase role="special">&lt;</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&gt;</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+  <link linkend="idm45394999845840-bb"><phrase role="identifier">check</phrase></link><phrase role="special">(</phrase><link linkend="boost.contract.specify_except">specify_except</link> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+  <link linkend="idm45394999836656-bb"><phrase role="identifier">check</phrase></link><phrase role="special">(</phrase><link linkend="boost.contract.specify_nothing">specify_nothing</link> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+  <link linkend="idm45394999827456-bb"><phrase role="special">~</phrase><phrase role="identifier">check</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
 <phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>In general, when this object is constructed it checks class invariants at entry, preconditions, and makes old value copies at body. When it is destructed, it checks class invariants at exist, postconditions, and exception guarantees. This object enforces the following (see  <link linkend="boost_contract.contract_programming_overview"> Contract Programming Overview</link>):</para><para><itemizedlist>
 <listitem><para>Postconditions are checked only if the body does not throw an exception. </para>
 </listitem>
 </listitem>
 <listitem><para>Constructor entry never checks class invariants. </para>
 </listitem>
-<listitem><para>Destructor exit checks class invariants only if the body throws an exception (even if destructors should usually not be programmed to throw exceptions in C++). </para>
+<listitem><para>Destructor exit checks class invariants only if the body throws an exception (even if destructors should usually not be programmed to throw exceptions in C++ and they are implicitly declared <computeroutput>noexcept</computeroutput> since C++11). </para>
 </listitem>
 <listitem><para>Static invariants are always checked at entry and exit (and regardless of the body throwing exceptions or not).</para>
 </listitem>
 </itemizedlist>
-When used this way, this object is usually constructed and initialized to the return value of one of the contract functions  <computeroutput><link linkend="boost.contract.function">boost::contract::function</link></computeroutput>, <computeroutput><link linkend="boost.contract.constructor">boost::contract::constructor</link></computeroutput>,  <computeroutput><link linkend="boost.contract.destructor">boost::contract::destructor</link></computeroutput>, or  <computeroutput><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>. In addition, this object can be constructed from a nullary functor that is used to program implementation checks.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial"> Tutorial</link>,  <link linkend="boost_contract.advanced.implementation_checks"> Implementation Checks</link> </para>
+When used this way, this object is constructed and initialized to the return value of one of the contract functions <computeroutput><link linkend="boost.contract.function">boost::contract::function</link></computeroutput>,  <computeroutput><link linkend="boost.contract.constructor">boost::contract::constructor</link></computeroutput>, <computeroutput><link linkend="boost.contract.destructor">boost::contract::destructor</link></computeroutput>, or <computeroutput><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>. In addition to that, this object can be constructed from a nullary functor when it is used to program implementation checks.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial"> Tutorial</link>,  <link linkend="boost_contract.advanced.implementation_checks"> Implementation Checks</link> </para>
 </para>
 </para><refsect2><title><anchor id="boost.contract.checkconstruct-copy-destruct"/><computeroutput>check</computeroutput> 
         public
-       construct/copy/destruct</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> <anchor id="idm45123870741424-bb"/><phrase role="identifier">check</phrase><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this object for implementation checks. <para>This can be used to program checks within implementation code (body, etc.). This constructor is not declared <computeroutput>explicit</computeroutput> so initializations can use assignment syntax <computeroutput>=</computeroutput>.</para><para><emphasis role="bold">Throws:</emphasis> This can throw in case programmers specify contract failure handlers that throw exceptions instead of terminating the program (see  <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__">
+       construct/copy/destruct</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> <anchor id="idm45394999887520-bb"/><phrase role="identifier">check</phrase><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this object for implementation checks. <para>This can be used to program checks within implementation code (body, etc.). This constructor is not declared <computeroutput>explicit</computeroutput> so initializations can use assignment syntax <computeroutput>=</computeroutput>.</para><para><emphasis role="bold">Throws:</emphasis> This can throw in case programmers specify contract failure handlers that throw exceptions instead of terminating the program (see  <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__">
             Throw on Failure</link>).</para><para>
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
                 ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Nullary functor that asserts implementation checks. <computeroutput>f()</computeroutput> will be called as soon as this object is constructed at the point it is declared within the implementation code (see  <link linkend="boost_contract.advanced.implementation_checks">
-            Implementation Checks</link>). </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><anchor id="idm45123870734048-bb"/><phrase role="identifier">check</phrase><phrase role="special">(</phrase><link linkend="boost.contract.check">check</link> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> other<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this object copying it from the specified one. <para>This object will check the contract, the copied-from object will not (i.e., contract check ownership is transferred from the copied object to the new object being created by this constructor).</para><para>
+            Implementation Checks</link>). </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><anchor id="idm45394999880144-bb"/><phrase role="identifier">check</phrase><phrase role="special">(</phrase><link linkend="boost.contract.check">check</link> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> other<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this object copying it from the specified one. <para>This object will check the contract, the copied-from object will not (i.e., contract check ownership is transferred from the copied object to the new object being created by this constructor).</para><para>
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
                 ?><varlistentry><term><computeroutput>other</computeroutput></term><listitem><para>Copied-from object. </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> VirtualResult<phrase role="special">&gt;</phrase> 
-  <anchor id="idm45123870731152-bb"/><phrase role="identifier">check</phrase><phrase role="special">(</phrase><link linkend="boost.contract.specify__idm45123870039968">specify_precondition_old_postcondition_except</link><phrase role="special">&lt;</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&gt;</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> contract<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this object to check the specified contract. <para>This checks class invariants at entry (if those apply to the specified contract). This constructor is not declared <computeroutput>explicit</computeroutput> so initializations can use assignment syntax <computeroutput>=</computeroutput>.</para><para><emphasis role="bold">Throws:</emphasis> This can throw in case programmers specify contract failure handlers that throw exceptions instead of terminating the program (see  <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__">
+  <anchor id="idm45394999877248-bb"/><phrase role="identifier">check</phrase><phrase role="special">(</phrase><link linkend="boost.contract.specify__idm45394999179040">specify_precondition_old_postcondition_except</link><phrase role="special">&lt;</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&gt;</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> contract<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this object to check the specified contract. <para>This checks class invariants at entry (if those were specified for the given contract). This constructor is not declared <computeroutput>explicit</computeroutput> so initializations can use assignment syntax <computeroutput>=</computeroutput>.</para><para><emphasis role="bold">Throws:</emphasis> This can throw in case programmers specify contract failure handlers that throw exceptions instead of terminating the program (see  <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__">
             Throw on Failure</link>).</para><para>
 
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>contract</computeroutput></term><listitem><para>Contract to be checked (usually the return value of  <computeroutput><computeroutput><link linkend="boost.contract.function">boost::contract::function</link></computeroutput></computeroutput> or  <computeroutput><computeroutput><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput></computeroutput>).</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Template Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
+                ?><varlistentry><term><computeroutput>contract</computeroutput></term><listitem><para>Contract to be checked (usually the return value of  <computeroutput><computeroutput><link linkend="boost.contract.function">boost::contract::function</link></computeroutput></computeroutput> or  <computeroutput><computeroutput><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput></computeroutput>).</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Template Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>VirtualResult</computeroutput></term><listitem><para>Return type of the enclosing function declaring the contract if that is either a virtual or an overriding public function. Otherwise, this is always <computeroutput>void</computeroutput>. </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> VirtualResult<phrase role="special">&gt;</phrase> 
-  <anchor id="idm45123870722000-bb"/><phrase role="identifier">check</phrase><phrase role="special">(</phrase><link linkend="boost.contract.specify__idm45123870103104">specify_old_postcondition_except</link><phrase role="special">&lt;</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&gt;</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> contract<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this object to check the specified contract. <para>This checks class invariants at entry and preconditions (if any of those apply to the specified contract). This constructor is not declared <computeroutput>explicit</computeroutput> so initializations can use assignment syntax <computeroutput>=</computeroutput>.</para><para><emphasis role="bold">Throws:</emphasis> This can throw in case programmers specify contract failure handlers that throw exceptions instead of terminating the program (see  <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__">
+                ?><varlistentry><term><computeroutput>VirtualResult</computeroutput></term><listitem><para>Return type of the enclosing function declaring the contract if that is either a virtual or an overriding public function, otherwise this is always <computeroutput>void</computeroutput>. (Usually this template parameter is automatically deduced by C++ and it does not need to be explicitly specified by programmers.) </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> VirtualResult<phrase role="special">&gt;</phrase> 
+  <anchor id="idm45394999867968-bb"/><phrase role="identifier">check</phrase><phrase role="special">(</phrase><link linkend="boost.contract.specify__idm45394999245856">specify_old_postcondition_except</link><phrase role="special">&lt;</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&gt;</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> contract<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this object to check the specified contract. <para>This checks class invariants at entry and preconditions (if any of those were specified for the given contract). This constructor is not declared <computeroutput>explicit</computeroutput> so initializations can use assignment syntax <computeroutput>=</computeroutput>.</para><para><emphasis role="bold">Throws:</emphasis> This can throw in case programmers specify contract failure handlers that throw exceptions instead of terminating the program (see  <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__">
             Throw on Failure</link>).</para><para>
 
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>contract</computeroutput></term><listitem><para>Contract to be checked (usually the return value of  <computeroutput><computeroutput><link linkend="boost.contract.function">boost::contract::function</link></computeroutput></computeroutput>,  <computeroutput><computeroutput><link linkend="boost.contract.constructor">boost::contract::constructor</link></computeroutput></computeroutput>,  <computeroutput><computeroutput><link linkend="boost.contract.destructor">boost::contract::destructor</link></computeroutput></computeroutput>, or  <computeroutput><computeroutput><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput></computeroutput>).</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Template Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
+                ?><varlistentry><term><computeroutput>contract</computeroutput></term><listitem><para>Contract to be checked (usually the return value of  <computeroutput><computeroutput><link linkend="boost.contract.function">boost::contract::function</link></computeroutput></computeroutput>,  <computeroutput><computeroutput><link linkend="boost.contract.constructor">boost::contract::constructor</link></computeroutput></computeroutput>,  <computeroutput><computeroutput><link linkend="boost.contract.destructor">boost::contract::destructor</link></computeroutput></computeroutput>, or  <computeroutput><computeroutput><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput></computeroutput>).</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Template Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>VirtualResult</computeroutput></term><listitem><para>Return type of the enclosing function declaring the contract if that is either a virtual or an overriding public function. Otherwise, this is always <computeroutput>void</computeroutput>. </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> VirtualResult<phrase role="special">&gt;</phrase> 
-  <anchor id="idm45123870711072-bb"/><phrase role="identifier">check</phrase><phrase role="special">(</phrase><link linkend="boost.contract.specify__idm45123870066880">specify_postcondition_except</link><phrase role="special">&lt;</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&gt;</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> contract<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this object to check the specified contract. <para>This checks class invariants at entry and preconditions then it makes old value copies at body (if any of those apply to the specified contract). This constructor is not declared <computeroutput>explicit</computeroutput> so initializations can use assignment syntax <computeroutput>=</computeroutput>.</para><para><emphasis role="bold">Throws:</emphasis> This can throw in case programmers specify contract failure handlers that throw exceptions instead of terminating te program (see  <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__">
+                ?><varlistentry><term><computeroutput>VirtualResult</computeroutput></term><listitem><para>Return type of the enclosing function declaring the contract if that is either a virtual or an overriding public function, otherwise this is always <computeroutput>void</computeroutput>. (Usually this template parameter is automatically deduced by C++ and it does not need to be explicitly specified by programmers.) </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> VirtualResult<phrase role="special">&gt;</phrase> 
+  <anchor id="idm45394999856928-bb"/><phrase role="identifier">check</phrase><phrase role="special">(</phrase><link linkend="boost.contract.specify__idm45394999207792">specify_postcondition_except</link><phrase role="special">&lt;</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&gt;</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> contract<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this object to check the specified contract. <para>This checks class invariants at entry and preconditions then it makes old value copies at body (if any of those were specified for the given contract). This constructor is not declared <computeroutput>explicit</computeroutput> so initializations can use assignment syntax <computeroutput>=</computeroutput>.</para><para><emphasis role="bold">Throws:</emphasis> This can throw in case programmers specify contract failure handlers that throw exceptions instead of terminating te program (see  <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__">
             Throw on Failure</link>).</para><para>
 
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>contract</computeroutput></term><listitem><para>Contract to be checked (usually the return value of  <computeroutput><computeroutput><link linkend="boost.contract.function">boost::contract::function</link></computeroutput></computeroutput>,  <computeroutput><computeroutput><link linkend="boost.contract.constructor">boost::contract::constructor</link></computeroutput></computeroutput>,  <computeroutput><computeroutput><link linkend="boost.contract.destructor">boost::contract::destructor</link></computeroutput></computeroutput>, or  <computeroutput><computeroutput><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput></computeroutput>).</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Template Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
+                ?><varlistentry><term><computeroutput>contract</computeroutput></term><listitem><para>Contract to be checked (usually the return value of  <computeroutput><computeroutput><link linkend="boost.contract.function">boost::contract::function</link></computeroutput></computeroutput>,  <computeroutput><computeroutput><link linkend="boost.contract.constructor">boost::contract::constructor</link></computeroutput></computeroutput>,  <computeroutput><computeroutput><link linkend="boost.contract.destructor">boost::contract::destructor</link></computeroutput></computeroutput>, or  <computeroutput><computeroutput><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput></computeroutput>).</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Template Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>VirtualResult</computeroutput></term><listitem><para>Return type of the enclosing function declaring the contract if that is either a virtual or an overriding public function. Otherwise, this is always <computeroutput>void</computeroutput>. </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><anchor id="idm45123870700112-bb"/><phrase role="identifier">check</phrase><phrase role="special">(</phrase><link linkend="boost.contract.specify_except">specify_except</link> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> contract<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this object to check the specified contract. <para>This checks class invariants at entry and preconditions then it makes old value copies at body, plus the destructor of this object will check postconditions in this case (if any of those apply to the specified contract). This constructor is not declared <computeroutput>explicit</computeroutput> so initializations can use assignment syntax <computeroutput>=</computeroutput>.</para><para><emphasis role="bold">Throws:</emphasis> This can throw in case programmers specify contract failure handlers that throw exceptions instead of terminating the program (see  <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__">
+                ?><varlistentry><term><computeroutput>VirtualResult</computeroutput></term><listitem><para>Return type of the enclosing function declaring the contract if that is either a virtual or an overriding public function, otherwise this is always <computeroutput>void</computeroutput>. (Usually this template parameter is automatically deduced by C++ and it does not need to be explicitly specified by programmers.) </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><anchor id="idm45394999845840-bb"/><phrase role="identifier">check</phrase><phrase role="special">(</phrase><link linkend="boost.contract.specify_except">specify_except</link> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> contract<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this object to check the specified contract. <para>This checks class invariants at entry and preconditions then it makes old value copies at body, plus the destructor of this object will also check postconditions in this case (if any of those were specified for the given contract). This constructor is not declared <computeroutput>explicit</computeroutput> so initializations can use assignment syntax <computeroutput>=</computeroutput>.</para><para><emphasis role="bold">Throws:</emphasis> This can throw in case programmers specify contract failure handlers that throw exceptions instead of terminating the program (see  <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__">
             Throw on Failure</link>).</para><para>
 
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>contract</computeroutput></term><listitem><para>Contract to be checked (usually the return value of  <computeroutput><computeroutput><link linkend="boost.contract.function">boost::contract::function</link></computeroutput></computeroutput>,  <computeroutput><computeroutput><link linkend="boost.contract.constructor">boost::contract::constructor</link></computeroutput></computeroutput>,  <computeroutput><computeroutput><link linkend="boost.contract.destructor">boost::contract::destructor</link></computeroutput></computeroutput>, or  <computeroutput><computeroutput><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput></computeroutput>).</para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><anchor id="idm45123870690944-bb"/><phrase role="identifier">check</phrase><phrase role="special">(</phrase><link linkend="boost.contract.specify_nothing">specify_nothing</link> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> contract<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this object to check the specified contract. <para>This checks class invariants at entry and preconditions then it makes old value copies at body, plus the destructor of this object will check postconditions and exception guarantees in this case (if any of those apply to the specified contract). This constructor is not declared <computeroutput>explicit</computeroutput> so initializations can use assignment syntax <computeroutput>=</computeroutput>.</para><para><emphasis role="bold">Throws:</emphasis> This can throw in case programmers specify contract failure handlers that throw exceptions instead of terminating the program (see  <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__">
+                ?><varlistentry><term><computeroutput>contract</computeroutput></term><listitem><para>Contract to be checked (usually the return value of  <computeroutput><computeroutput><link linkend="boost.contract.function">boost::contract::function</link></computeroutput></computeroutput>,  <computeroutput><computeroutput><link linkend="boost.contract.constructor">boost::contract::constructor</link></computeroutput></computeroutput>,  <computeroutput><computeroutput><link linkend="boost.contract.destructor">boost::contract::destructor</link></computeroutput></computeroutput>, or  <computeroutput><computeroutput><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput></computeroutput>).</para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><anchor id="idm45394999836656-bb"/><phrase role="identifier">check</phrase><phrase role="special">(</phrase><link linkend="boost.contract.specify_nothing">specify_nothing</link> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> contract<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this object to check the specified contract. <para>This checks class invariants at entry and preconditions then it makes old value copies at body, plus the destructor of this object will also check postconditions and exception guarantees in this case (if any of those were specified for the given contract). This constructor is not declared <computeroutput>explicit</computeroutput> so initializations can use assignment syntax <computeroutput>=</computeroutput>.</para><para><emphasis role="bold">Throws:</emphasis> This can throw in case programmers specify contract failure handlers that throw exceptions instead of terminating the program (see  <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__">
             Throw on Failure</link>).</para><para>
 
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>contract</computeroutput></term><listitem><para>Contract to be checked (usually the return value of  <computeroutput><computeroutput><link linkend="boost.contract.function">boost::contract::function</link></computeroutput></computeroutput>,  <computeroutput><computeroutput><link linkend="boost.contract.constructor">boost::contract::constructor</link></computeroutput></computeroutput>,  <computeroutput><computeroutput><link linkend="boost.contract.destructor">boost::contract::destructor</link></computeroutput></computeroutput>, or  <computeroutput><computeroutput><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput></computeroutput>).</para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><anchor id="idm45123870681760-bb"/><phrase role="special">~</phrase><phrase role="identifier">check</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Destruct this object. <para>This checks class invariants at exit and either postconditions when the enclosing function body did not throw an exception, or exception guarantees when the function body threw an exception (that is if class invariants, postconditions, and exception guarantees respectively apply to the contract parameter specified when constructing this object).</para><para><emphasis role="bold">Throws:</emphasis> This can throw in case programmers specify contract failure handlers that throw exceptions instead of terminating the program (see  <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__">
+                ?><varlistentry><term><computeroutput>contract</computeroutput></term><listitem><para>Contract to be checked (usually the return value of  <computeroutput><computeroutput><link linkend="boost.contract.function">boost::contract::function</link></computeroutput></computeroutput>,  <computeroutput><computeroutput><link linkend="boost.contract.constructor">boost::contract::constructor</link></computeroutput></computeroutput>,  <computeroutput><computeroutput><link linkend="boost.contract.destructor">boost::contract::destructor</link></computeroutput></computeroutput>, or  <computeroutput><computeroutput><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput></computeroutput>).</para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><anchor id="idm45394999827456-bb"/><phrase role="special">~</phrase><phrase role="identifier">check</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Destruct this object. <para>This checks class invariants at exit and either postconditions when the enclosing function body did not throw an exception, or exception guarantees when the function body threw an exception (if class invariants, postconditions, and exception guarantees respectively were specified for the enclosing class and the contract parameter given when constructing this object).</para><para><emphasis role="bold">Throws:</emphasis> This can throw in case programmers specify contract failure handlers that throw exceptions instead of terminating the program (see  <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__">
             Throw on Failure</link>). (This is declared <computeroutput>noexcept(false)</computeroutput> since C++11.) </para></listitem></orderedlist></refsect2></refsect1></refentry>
 </section>
 <section id="header.boost.contract.constructor_hpp"><title>Header &lt;<ulink url="../../../../boost/contract/constructor.hpp">boost/contract/constructor.hpp</ulink>&gt;</title><para>Program contracts for constructors. </para><synopsis xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">namespace</phrase> <phrase role="identifier">boost</phrase> <phrase role="special">{</phrase>
   <phrase role="keyword">namespace</phrase> <phrase role="identifier">contract</phrase> <phrase role="special">{</phrase>
     <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Class<phrase role="special">&gt;</phrase> 
-      <link linkend="boost.contract.specify__idm45123870103104">specify_old_postcondition_except</link> <link linkend="boost.contract.constructor"><phrase role="identifier">constructor</phrase></link><phrase role="special">(</phrase><phrase role="identifier">Class</phrase> <phrase role="special">*</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+      <link linkend="boost.contract.specify__idm45394999245856">specify_old_postcondition_except</link> <link linkend="boost.contract.constructor"><phrase role="identifier">constructor</phrase></link><phrase role="special">(</phrase><phrase role="identifier">Class</phrase> <phrase role="special">*</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
   <phrase role="special">}</phrase>
 <phrase role="special">}</phrase></synopsis>
 <refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.constructor"><refmeta><refentrytitle>Function template constructor</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::constructor</refname><refpurpose>Program contracts for constructors. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.constructor_hpp">boost/contract/constructor.hpp</link>&gt;
 
 </phrase>
 <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Class<phrase role="special">&gt;</phrase> 
-  <link linkend="boost.contract.specify__idm45123870103104">specify_old_postcondition_except</link> <phrase role="identifier">constructor</phrase><phrase role="special">(</phrase><phrase role="identifier">Class</phrase> <phrase role="special">*</phrase> obj<phrase role="special">)</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is used to specify postconditions, exception guarantees, old value copies at body, and check class invariants for constructors (see  <computeroutput><computeroutput><link linkend="boost.contract.constructor_precondition">boost::contract::constructor_precondition</link></computeroutput></computeroutput> to specify preconditions for constructors instead):</para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase> <phrase role="special">{</phrase>
+  <link linkend="boost.contract.specify__idm45394999245856">specify_old_postcondition_except</link> <phrase role="identifier">constructor</phrase><phrase role="special">(</phrase><phrase role="identifier">Class</phrase> <phrase role="special">*</phrase> obj<phrase role="special">)</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is used to specify postconditions, exception guarantees, old value copies at body, and check class invariants for constructors (see  <computeroutput><computeroutput><link linkend="boost.contract.constructor_precondition">boost::contract::constructor_precondition</link></computeroutput></computeroutput> to specify preconditions for constructors):</para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase> <phrase role="special">{</phrase>
     <phrase role="keyword">friend</phrase> <phrase role="keyword">class</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">:</phrase><phrase role="identifier">access</phrase><phrase role="special">;</phrase>
 
     <phrase role="keyword">void</phrase> <phrase role="identifier">invariant</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase> <phrase role="special">{</phrase> <phrase role="comment">// Optional (as for static and volatile).</phrase>
@@ -14132,7 +14373,7 @@ When used this way, this object is usually constructed and initialized to the re
     <phrase role="identifier">u</phrase><phrase role="special">(</phrase><phrase role="special">...</phrase><phrase role="special">)</phrase> <phrase role="special">{</phrase>
         <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">old_ptr</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">old_type</phrase><phrase role="special">&gt;</phrase> <phrase role="identifier">old_var</phrase><phrase role="special">;</phrase>
         <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">check</phrase> <phrase role="identifier">c</phrase> <phrase role="special">=</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">constructor</phrase><phrase role="special">(</phrase><phrase role="keyword">this</phrase><phrase role="special">)</phrase>
-            <phrase role="comment">// No `.precondition` (use `constructor_precondition` if needed).</phrase>
+            <phrase role="comment">// No `.precondition` (use `constructor_precondition` instead).</phrase>
             <phrase role="special">.</phrase><phrase role="identifier">old</phrase><phrase role="special">(</phrase><phrase role="special">[</phrase><phrase role="special">&amp;</phrase><phrase role="special">]</phrase> <phrase role="special">{</phrase> <phrase role="comment">// Optional.</phrase>
                 <phrase role="identifier">old_var</phrase> <phrase role="special">=</phrase> <phrase role="identifier">BOOST_CONTRACT_OLDOF</phrase><phrase role="special">(</phrase><phrase role="identifier">old_expr</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
                 <phrase role="special">...</phrase>
@@ -14165,32 +14406,32 @@ When used this way, this object is usually constructed and initialized to the re
             Class Invariants</link> and  <link linkend="boost_contract.extras.volatile_public_functions">
             Volatile Public Functions</link>).</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Template Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>Class</computeroutput></term><listitem><para>The type of the class containing the constructor declaring the contract. (Usually this template parameter is automatically deduced by C++ and it does not need to be explicitly specified by programmers.)</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>The result of this function must be explicitly assigned to a variable of type <computeroutput><link linkend="boost.contract.check">boost::contract::check</link></computeroutput> declared locally just before the code of the constructor body (otherwise this library will generate a run-time error, see <computeroutput><link linkend="BOOST_CO_idm45123870548928">BOOST_CONTRACT_ON_MISSING_CHECK_DECL</link></computeroutput>). </para></listitem></varlistentry></variablelist></refsect1></refentry>
+                ?><varlistentry><term><computeroutput>Class</computeroutput></term><listitem><para>The type of the class containing the constructor declaring the contract. (Usually this template parameter is automatically deduced by C++ and it does not need to be explicitly specified by programmers.)</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>The result of this function must be assigned to a variable of type  <computeroutput><link linkend="boost.contract.check">boost::contract::check</link></computeroutput> declared explicitly (i.e., without using C++11 <computeroutput>auto</computeroutput> declarations) and locally just before the code of the constructor body (otherwise this library will generate a run-time error, see <computeroutput><link linkend="BOOST_CO_idm45394999694064">BOOST_CONTRACT_ON_MISSING_CHECK_DECL</link></computeroutput>). </para></listitem></varlistentry></variablelist></refsect1></refentry>
 </section>
 <section id="header.boost.contract.core.access_hpp"><title>Header &lt;<ulink url="../../../../boost/contract/core/access.hpp">boost/contract/core/access.hpp</ulink>&gt;</title><para>Allow to declare invariants, base types, etc all as private members. </para><synopsis xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">namespace</phrase> <phrase role="identifier">boost</phrase> <phrase role="special">{</phrase>
   <phrase role="keyword">namespace</phrase> <phrase role="identifier">contract</phrase> <phrase role="special">{</phrase>
     <phrase role="keyword">class</phrase> <link linkend="boost.contract.access">access</link><phrase role="special">;</phrase>
   <phrase role="special">}</phrase>
 <phrase role="special">}</phrase></synopsis>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.access"><refmeta><refentrytitle>Class access</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::access</refname><refpurpose>Friend this class to declare invariants and base types as private members. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.access_hpp">boost/contract/core/access.hpp</link>&gt;
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.access"><refmeta><refentrytitle>Class access</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::access</refname><refpurpose>Declare this class as friend to program invariants and base types as private members. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.access_hpp">boost/contract/core/access.hpp</link>&gt;
 
 </phrase>
 <phrase role="keyword">class</phrase> <link linkend="boost.contract.access">access</link> <phrase role="special">{</phrase>
-<phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>Declare this class a friend of the user-defined class specifying the contracts in order to declare the invariant functions and the base types <computeroutput>typedef</computeroutput> as non-public members:</para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase> <phrase role="special">:</phrase>
+<phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>Declare this class a friend of the user-defined class specifying the contracts and then invariant functions and the base types <computeroutput>typedef</computeroutput> can be declared as non-public members:</para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase>
     <phrase role="preprocessor">#define</phrase> <phrase role="identifier">BASES</phrase> <phrase role="keyword">public</phrase> <phrase role="identifier">b</phrase><phrase role="special">,</phrase> <phrase role="keyword">private</phrase> <phrase role="identifier">w</phrase>
-    <phrase role="identifier">BASES</phrase>
+    <phrase role="special">:</phrase> <phrase role="identifier">BASES</phrase>
 <phrase role="special">{</phrase>
     <phrase role="keyword">friend</phrase> <phrase role="keyword">class</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">access</phrase><phrase role="special">;</phrase>
 
-    <phrase role="keyword">typedef</phrase> <phrase role="identifier">BOOST_CONTRACT_BASES</phrase><phrase role="special">(</phrase><phrase role="identifier">BASES</phrase><phrase role="special">)</phrase> <phrase role="identifier">base_types</phrase><phrase role="special">;</phrase> <phrase role="comment">// Private.</phrase>
+    <phrase role="keyword">typedef</phrase> <phrase role="identifier">BOOST_CONTRACT_BASE_TYPES</phrase><phrase role="special">(</phrase><phrase role="identifier">BASES</phrase><phrase role="special">)</phrase> <phrase role="identifier">base_types</phrase><phrase role="special">;</phrase> <phrase role="comment">// Private.</phrase>
     <phrase role="preprocessor">#undef</phrase> <phrase role="identifier">BASES</phrase>
 
-    <phrase role="keyword">void</phrase> <phrase role="identifier">invariant</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase> <phrase role="special">{</phrase> <phrase role="special">...</phrase> <phrase role="special">}</phrase> <phrase role="comment">// Private.</phrase>
+    <phrase role="keyword">void</phrase> <phrase role="identifier">invariant</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase> <phrase role="special">{</phrase> <phrase role="special">...</phrase> <phrase role="special">}</phrase> <phrase role="comment">// Private (same for static and volatile).</phrase>
 
 <phrase role="keyword">public</phrase><phrase role="special">:</phrase>
     <phrase role="special">...</phrase>
 <phrase role="special">}</phrase><phrase role="special">;</phrase>
-</programlisting></para><para>In real code, programmers will likely chose to declare this class as friend so to fully control public interfaces of their user-defined classes. This class is not intended to be directly used by programmers a part from declaring it <computeroutput>friend</computeroutput> (and that is why this class does not have any public member and it is not copyable).</para><para><warning><para>Not declaring this class friend of user-defined classes will cause compiler errors on some compilers (e.g., MSVC) because the private members needed to check the contracts will not be accessible. On other compilers (e.g., GCC and CLang), the private access will instead fail SFINAE and no compiler error will be reported while invariants and subcontracting will be silently skipped at run-time. Therefore, programmers must make sure to either declare this class as friend (preferred) or to always declare invariant functions and base types <computeroutput>typedef</computeroutput> as public members.</para>
+</programlisting></para><para>In real code, programmers will likely chose to declare this class as friend so to fully control public interfaces of their user-defined classes (this is not extensively done in the examples of this documentation only for brevity). This class is not intended to be directly used by programmers a part from being declared as <computeroutput>friend</computeroutput> (and that is why this class does not have any public member and it is not copyable).</para><para><warning><para>Not declaring this class friend of user-defined classes will cause compiler errors on some compilers (e.g., MSVC) because the private members needed to check the contracts will not be accessible. On other compilers (e.g., GCC and CLang), the private access will instead fail SFINAE and no compiler error will be reported while invariants and subcontracting will be silently skipped at run-time. Therefore, programmers must make sure to either declare this class as friend or to always declare invariant functions and base types <computeroutput>typedef</computeroutput> as public members.</para>
 </warning>
 <para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.advanced.access_specifiers"> Access Specifiers</link> </para>
 </para>
@@ -14205,7 +14446,7 @@ When used this way, this object is usually constructed and initialized to the re
 
 </phrase>BOOST_CONTRACT_CHECK(cond)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>It is preferred to use this macro instead of programming implementation checks in a nullary functor passed to <computeroutput><link linkend="boost.contract.check">boost::contract::check</link></computeroutput> constructor because this macro will completely remove implementation checks from the code when <computeroutput><link linkend="BOOST_CONTRACT_NO_CHECKS">BOOST_CONTRACT_NO_CHECKS</link></computeroutput> is defined:</para><para><programlisting><phrase role="keyword">void</phrase> <phrase role="identifier">f</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="special">{</phrase>
     <phrase role="special">...</phrase>
-    <phrase role="identifier">BOOST_CONTRACT_CHECK</phrase><phrase role="special">(</phrase><phrase role="special">...</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+    <phrase role="identifier">BOOST_CONTRACT_CHECK</phrase><phrase role="special">(</phrase><phrase role="identifier">cond</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
     <phrase role="special">...</phrase>
 <phrase role="special">}</phrase>
 </programlisting></para><para> <computeroutput><link linkend="BOOST_CONTRACT_CHECK">BOOST_CONTRACT_CHECK</link></computeroutput>, <computeroutput><link linkend="BOOST_CONTRACT_CHECK_AUDIT">BOOST_CONTRACT_CHECK_AUDIT</link></computeroutput>, and  <computeroutput><link linkend="BOOST_CONTRACT_CHECK_AXIOM">BOOST_CONTRACT_CHECK_AXIOM</link></computeroutput> are the three assertion levels predefined by this library for implementation checks.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.advanced.implementation_checks"> Implementation Checks</link></para>
@@ -14215,10 +14456,10 @@ When used this way, this object is usually constructed and initialized to the re
               list-presentation="table"
             ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                       list-presentation="table"
-                    ?><varlistentry><term><computeroutput>cond</computeroutput></term><listitem><para>Boolean condition to check within implementation code (function body, etc.). (This is not a variadic macro parameter so any comma it might contain must be protected by round parenthesis, <computeroutput>BOOST_CONTRACT_CHECK((cond))</computeroutput> will always work.) </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></refsect1></refentry>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CONTRACT_CHECK_AUDIT"><refmeta><refentrytitle>Macro BOOST_CONTRACT_CHECK_AUDIT</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_CHECK_AUDIT</refname><refpurpose>Preferred way to assert implementation check conditions that are computationally expensive, at least compared to the cost of executing the function body. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.check_macro_hpp">boost/contract/core/check_macro.hpp</link>&gt;
+                    ?><varlistentry><term><computeroutput>cond</computeroutput></term><listitem><para>Boolean condition to check within implementation code (function body, etc.). (This is not a variadic macro parameter so any comma it might contain must be protected by round parenthesis and <computeroutput>BOOST_CONTRACT_CHECK((cond))</computeroutput> will always work.) </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></refsect1></refentry>
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CONTRACT_CHECK_AUDIT"><refmeta><refentrytitle>Macro BOOST_CONTRACT_CHECK_AUDIT</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_CHECK_AUDIT</refname><refpurpose>Preferred way to assert implementation check conditions that are computationally expensive, at least compared to the computational cost of executing the function body. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.check_macro_hpp">boost/contract/core/check_macro.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_CHECK_AUDIT(cond)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>The specified condition will always be compiled and validated syntactically, but it will not be evaluated at run-time unless  <computeroutput><link linkend="BOOST_CONTRACT_AUDITS">BOOST_CONTRACT_AUDITS</link></computeroutput> is defined (undefined by default). This macro is defined by code equivalent to:</para><para><programlisting><phrase role="preprocessor">#ifdef</phrase> <phrase role="identifier">BOOST_CONTRACT_AUDITS</phrase>
+</phrase>BOOST_CONTRACT_CHECK_AUDIT(cond)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>The specified condition will always be compiled and validated syntactically, but it will not be checked at run-time unless  <computeroutput><link linkend="BOOST_CONTRACT_AUDITS">BOOST_CONTRACT_AUDITS</link></computeroutput> is defined (undefined by default). This macro is defined by code equivalent to:</para><para><programlisting><phrase role="preprocessor">#ifdef</phrase> <phrase role="identifier">BOOST_CONTRACT_AUDITS</phrase>
     <phrase role="preprocessor">#define</phrase> <phrase role="identifier">BOOST_CONTRACT_CHECK_AUDIT</phrase><phrase role="special">(</phrase><phrase role="identifier">cond</phrase><phrase role="special">)</phrase> \
         <phrase role="identifier">BOOST_CONTRACT_CHECK</phrase><phrase role="special">(</phrase><phrase role="identifier">cond</phrase><phrase role="special">)</phrase>
 <phrase role="preprocessor">#else</phrase>
@@ -14232,10 +14473,10 @@ When used this way, this object is usually constructed and initialized to the re
               list-presentation="table"
             ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                       list-presentation="table"
-                    ?><varlistentry><term><computeroutput>cond</computeroutput></term><listitem><para>Boolean condition to check within implementation code (function body, etc.). (This is not a variadic macro parameter so any comma it might contain must be protected by round parenthesis, <computeroutput>BOOST_CONTRACT_CHECK_AUDIT((cond))</computeroutput> will always work.) </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></refsect1></refentry>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CONTRACT_CHECK_AXIOM"><refmeta><refentrytitle>Macro BOOST_CONTRACT_CHECK_AXIOM</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_CHECK_AXIOM</refname><refpurpose>Preferred way to assert implementation check conditions that are computationally prohibitive, at least compared to the cost of executing the function body. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.check_macro_hpp">boost/contract/core/check_macro.hpp</link>&gt;
+                    ?><varlistentry><term><computeroutput>cond</computeroutput></term><listitem><para>Boolean condition to check within implementation code (function body, etc.). (This is not a variadic macro parameter so any comma it might contain must be protected by round parenthesis and <computeroutput>BOOST_CONTRACT_CHECK_AUDIT((cond))</computeroutput> will always work.) </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></refsect1></refentry>
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CONTRACT_CHECK_AXIOM"><refmeta><refentrytitle>Macro BOOST_CONTRACT_CHECK_AXIOM</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_CHECK_AXIOM</refname><refpurpose>Preferred way to document in the code implementation check conditions that are computationally prohibitive, at least compared to the computational cost of executing the function body. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.check_macro_hpp">boost/contract/core/check_macro.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_CHECK_AXIOM(cond)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>The specified condition will always be compiled and validated syntactically, but it will never be evaluated at run-time. This macro is defined by code equivalent to:</para><para><programlisting><phrase role="preprocessor">#define</phrase> <phrase role="identifier">BOOST_CONTRACT_CHECK_AXIOM</phrase><phrase role="special">(</phrase><phrase role="identifier">cond</phrase><phrase role="special">)</phrase> \
+</phrase>BOOST_CONTRACT_CHECK_AXIOM(cond)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>The specified condition will always be compiled and validated syntactically, but it will never be checked at run-time. This macro is defined by code equivalent to:</para><para><programlisting><phrase role="preprocessor">#define</phrase> <phrase role="identifier">BOOST_CONTRACT_CHECK_AXIOM</phrase><phrase role="special">(</phrase><phrase role="identifier">cond</phrase><phrase role="special">)</phrase> \
     <phrase role="identifier">BOOST_CONTRACT_CHECK</phrase><phrase role="special">(</phrase><phrase role="keyword">true</phrase> <phrase role="special">||</phrase> <phrase role="identifier">cond</phrase><phrase role="special">)</phrase>
 </programlisting></para><para> <computeroutput><link linkend="BOOST_CONTRACT_CHECK">BOOST_CONTRACT_CHECK</link></computeroutput>, <computeroutput><link linkend="BOOST_CONTRACT_CHECK_AUDIT">BOOST_CONTRACT_CHECK_AUDIT</link></computeroutput>, and  <computeroutput><link linkend="BOOST_CONTRACT_CHECK_AXIOM">BOOST_CONTRACT_CHECK_AXIOM</link></computeroutput> are the three assertion levels predefined by this library for implementation checks. If there is a need, programmers are free to implement their own assertion levels defining macros similar to the one above.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.extras.assertion_levels"> Assertion Levels</link></para>
 </para>
@@ -14244,62 +14485,59 @@ When used this way, this object is usually constructed and initialized to the re
               list-presentation="table"
             ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                       list-presentation="table"
-                    ?><varlistentry><term><computeroutput>cond</computeroutput></term><listitem><para>Boolean condition to check within implementation code (function body, etc.). (This is not a variadic macro parameter so any comma it might contain must be protected by round parenthesis, <computeroutput>BOOST_CONTRACT_CHECK_AXIOM((cond))</computeroutput> will always work.) </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></refsect1></refentry>
+                    ?><varlistentry><term><computeroutput>cond</computeroutput></term><listitem><para>Boolean condition to check within implementation code (function body, etc.). (This is not a variadic macro parameter so any comma it might contain must be protected by round parenthesis and <computeroutput>BOOST_CONTRACT_CHECK_AXIOM((cond))</computeroutput> will always work.) </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></refsect1></refentry>
 </section>
 <section id="header.boost.contract.core.config_hpp"><title>Header &lt;<ulink url="../../../../boost/contract/core/config.hpp">boost/contract/core/config.hpp</ulink>&gt;</title><para>Configure this library compile-time and run-time behaviours. </para><synopsis xmlns:xi="http://www.w3.org/2001/XInclude">
 
 <link linkend="BOOST_CONTRACT_DYN_LINK">BOOST_CONTRACT_DYN_LINK</link>
 <link linkend="BOOST_CONTRACT_STATIC_LINK">BOOST_CONTRACT_STATIC_LINK</link>
 <link linkend="BOOST_CONTRACT_HEADER_ONLY">BOOST_CONTRACT_HEADER_ONLY</link>
-<link linkend="BOOST_CO_idm45123870598624">BOOST_CONTRACT_DISABLE_THREADS</link>
+<link linkend="BOOST_CO_idm45394999743888">BOOST_CONTRACT_DISABLE_THREADS</link>
 <link linkend="BOOST_CONTRACT_MAX_ARGS">BOOST_CONTRACT_MAX_ARGS</link>
-<link linkend="BOOST_CO_idm45123870587168">BOOST_CONTRACT_BASES_TYPEDEF</link>
-<link linkend="BOOST_CO_idm45123870579312">BOOST_CONTRACT_INVARIANT_FUNC</link>
-<link linkend="BOOST_CO_idm45123870569600">BOOST_CONTRACT_STATIC_INVARIANT_FUNC</link>
+<link linkend="BOOST_CO_idm45394999732400">BOOST_CONTRACT_BASES_TYPEDEF</link>
+<link linkend="BOOST_CO_idm45394999724496">BOOST_CONTRACT_INVARIANT_FUNC</link>
+<link linkend="BOOST_CO_idm45394999714768">BOOST_CONTRACT_STATIC_INVARIANT_FUNC</link>
 <link linkend="BOOST_CONTRACT_PERMISSIVE">BOOST_CONTRACT_PERMISSIVE</link>
-<link linkend="BOOST_CO_idm45123870548928">BOOST_CONTRACT_ON_MISSING_CHECK_DECL</link>
-<link linkend="BOOST_CO_idm45123870540560">BOOST_CONTRACT_PRECONDITIONS_DISABLE_NO_ASSERTION</link>
-<link linkend="BOOST_CO_idm45123870534752">BOOST_CONTRACT_ALL_DISABLE_NO_ASSERTION</link>
+<link linkend="BOOST_CO_idm45394999694064">BOOST_CONTRACT_ON_MISSING_CHECK_DECL</link>
+<link linkend="BOOST_CO_idm45394999685184">BOOST_CONTRACT_PRECONDITIONS_DISABLE_NO_ASSERTION</link>
+<link linkend="BOOST_CO_idm45394999679376">BOOST_CONTRACT_ALL_DISABLE_NO_ASSERTION</link>
 <link linkend="BOOST_CONTRACT_AUDITS">BOOST_CONTRACT_AUDITS</link>
 <link linkend="BOOST_CONTRACT_NO_CHECKS">BOOST_CONTRACT_NO_CHECKS</link>
-<link linkend="BOOST_CO_idm45123870517808">BOOST_CONTRACT_NO_PRECONDITIONS</link>
-<link linkend="BOOST_CO_idm45123870511440">BOOST_CONTRACT_NO_POSTCONDITIONS</link>
+<link linkend="BOOST_CO_idm45394999662416">BOOST_CONTRACT_NO_PRECONDITIONS</link>
+<link linkend="BOOST_CO_idm45394999656032">BOOST_CONTRACT_NO_POSTCONDITIONS</link>
 <link linkend="BOOST_CONTRACT_NO_EXCEPTS">BOOST_CONTRACT_NO_EXCEPTS</link>
-<link linkend="BOOST_CO_idm45123870492704">BOOST_CONTRACT_NO_ENTRY_INVARIANTS</link>
-<link linkend="BOOST_CO_idm45123870485088">BOOST_CONTRACT_NO_EXIT_INVARIANTS</link>
-<link linkend="BOOST_CO_idm45123870477472">BOOST_CONTRACT_NO_INVARIANTS</link>
+<link linkend="BOOST_CO_idm45394999637264">BOOST_CONTRACT_NO_ENTRY_INVARIANTS</link>
+<link linkend="BOOST_CO_idm45394999629648">BOOST_CONTRACT_NO_EXIT_INVARIANTS</link>
+<link linkend="BOOST_CO_idm45394999622032">BOOST_CONTRACT_NO_INVARIANTS</link>
 <link linkend="BOOST_CONTRACT_NO_OLDS">BOOST_CONTRACT_NO_OLDS</link>
-<link linkend="BOOST_CO_idm45123870460880">BOOST_CONTRACT_NO_CONSTRUCTORS</link>
-<link linkend="BOOST_CO_idm45123870450032">BOOST_CONTRACT_NO_DESTRUCTORS</link>
-<link linkend="BOOST_CO_idm45123870441776">BOOST_CONTRACT_NO_PUBLIC_FUNCTIONS</link>
-<link linkend="BOOST_CO_idm45123870432592">BOOST_CONTRACT_NO_FUNCTIONS</link>
-<link linkend="BOOST_CO_idm45123870422272">BOOST_CONTRACT_NO_CONDITIONS</link>
+<link linkend="BOOST_CO_idm45394999605408">BOOST_CONTRACT_NO_CONSTRUCTORS</link>
+<link linkend="BOOST_CO_idm45394999594544">BOOST_CONTRACT_NO_DESTRUCTORS</link>
+<link linkend="BOOST_CO_idm45394999586272">BOOST_CONTRACT_NO_PUBLIC_FUNCTIONS</link>
+<link linkend="BOOST_CO_idm45394999577072">BOOST_CONTRACT_NO_FUNCTIONS</link>
+<link linkend="BOOST_CO_idm45394999566736">BOOST_CONTRACT_NO_CONDITIONS</link>
 <link linkend="BOOST_CONTRACT_NO_ALL">BOOST_CONTRACT_NO_ALL</link></synopsis>
 <refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CONTRACT_DYN_LINK"><refmeta><refentrytitle>Macro BOOST_CONTRACT_DYN_LINK</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_DYN_LINK</refname><refpurpose>Define this macro to compile this library as a shared library (recommended). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_DYN_LINK</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>If this macro is defined, this library is compiled so it can be linked as a shared library (a.k.a., Dynamically Linked Library or DLL) to user code. Also, this library will automatically define this macro when Boost libraries are built as dynamic libraries (e.g., defining <computeroutput>BOOST_ALL_DYN_LINK</computeroutput>).</para><para><warning><para>In general this library will correctly check contracts at run-time only when compiled as a shared library, unless user code checks contracts in a single program unit (e.g., a single program with only statically linked libraries that check contracts). Therefore, it is recommended to build and use this library as a dynamic library by defining this macro (or equivalently by building all Boost libraries as dynamic libraries and <computeroutput>BOOST_ALL_DYN_LINK</computeroutput> is defined).</para>
+</phrase>BOOST_CONTRACT_DYN_LINK</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>If this macro is defined, this library is compiled so it can be linked as a shared library (a.k.a., Dynamically Linked Library or DLL) to user code. This library will automatically define this macro when Boost libraries are built as shared libraries (e.g., defining <computeroutput>BOOST_ALL_DYN_LINK</computeroutput> or using <computeroutput>bjam link=shared ...</computeroutput>).</para><para><warning><para>In general this library will correctly check contracts at run-time only when compiled as a shared library, unless user code checks contracts in a single program unit (e.g., a single program with only statically linked libraries). Therefore, it is recommended to build and use this library as a shared library by defining this macro (or equivalently by building all Boost libraries as shared libraries).</para>
 </warning>
-<para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.getting_started.compilers_and_platforms"> Compilers and
-        Platforms</link> </para>
+<para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.getting_started"> Getting Started</link> </para>
 </para>
 </para></refsect1></refentry>
 <refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CONTRACT_STATIC_LINK"><refmeta><refentrytitle>Macro BOOST_CONTRACT_STATIC_LINK</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_STATIC_LINK</refname><refpurpose>Define this macro to compile this library as a static library (not recommended). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_STATIC_LINK</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>If this macro is defined, this library is compiled so it can be linked statically to user code. This library build scripts will automatically define this macro when Boost libraries are being built as static libraries.</para><para><warning><para>This library is not guaranteed to always work correctly at run-time when this macro is defined (define  <computeroutput><link linkend="BOOST_CONTRACT_DYN_LINK">BOOST_CONTRACT_DYN_LINK</link></computeroutput> or <computeroutput>BOOST_ALL_DYN_LINK</computeroutput> instead). However, this macro can be defined and this library can be safely used as a static library for user code that checks contracts in a single program unit (e.g., a single program with only statically linked libraries that check contracts).</para>
+</phrase>BOOST_CONTRACT_STATIC_LINK</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>If this macro is defined, this library is compiled so it can be linked statically to user code. This library will automatically define this macro when Boost libraries are built as static libraries.</para><para><warning><para>This library is not guaranteed to always work correctly at run-time when this macro is defined (define  <computeroutput><link linkend="BOOST_CONTRACT_DYN_LINK">BOOST_CONTRACT_DYN_LINK</link></computeroutput> or <computeroutput>BOOST_ALL_DYN_LINK</computeroutput> instead). However, this macro can be defined and this library can be safely used as a static library for user code that checks contracts in a single program unit (e.g., a single program with only statically linked libraries).</para>
 </warning>
-<para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.getting_started.compilers_and_platforms"> Compilers and
-        Platforms</link> </para>
+<para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.getting_started"> Getting Started</link> </para>
 </para>
 </para></refsect1></refentry>
 <refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CONTRACT_HEADER_ONLY"><refmeta><refentrytitle>Macro BOOST_CONTRACT_HEADER_ONLY</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_HEADER_ONLY</refname><refpurpose>Automatically defined by this library when it is being used as a header-only library (not recommended). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_HEADER_ONLY</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This library will define this macro when users do not define  <computeroutput><link linkend="BOOST_CONTRACT_DYN_LINK">BOOST_CONTRACT_DYN_LINK</link></computeroutput> (or <computeroutput>BOOST_ALL_DYN_LINK</computeroutput>) and  <computeroutput><link linkend="BOOST_CONTRACT_STATIC_LINK">BOOST_CONTRACT_STATIC_LINK</link></computeroutput> (this macro is not a configuration macro and this library will generate a compile-time error if users try to define it directly). When used as a header-only library, this library code does not have to be compiled separately from user code, this library headers are simply included and compiled as part of the user program.</para><para><warning><para>This library is not guaranteed to always work correctly at run-time when this macro is defined (define  <computeroutput><link linkend="BOOST_CONTRACT_DYN_LINK">BOOST_CONTRACT_DYN_LINK</link></computeroutput> or <computeroutput>BOOST_ALL_DYN_LINK</computeroutput> instead). However, this macro can be defined and this library can be safely used as a header-only library for user code that checks contracts in a single program unit (e.g., a single program with only statically linked libraries that check contracts).</para>
+</phrase>BOOST_CONTRACT_HEADER_ONLY</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This macro is not a configuration macro and this library will generate a compile-time error if users try to define it directly. This library will automatically define this macro when users do not define  <computeroutput><link linkend="BOOST_CONTRACT_DYN_LINK">BOOST_CONTRACT_DYN_LINK</link></computeroutput> (or <computeroutput>BOOST_ALL_DYN_LINK</computeroutput>) and  <computeroutput><link linkend="BOOST_CONTRACT_STATIC_LINK">BOOST_CONTRACT_STATIC_LINK</link></computeroutput>. When used as a header-only library, this library code does not have to be compiled separately from user code, this library headers are simply included and compiled as part of the user program.</para><para><warning><para>This library is not guaranteed to always work correctly at run-time when this macro is defined (define  <computeroutput><link linkend="BOOST_CONTRACT_DYN_LINK">BOOST_CONTRACT_DYN_LINK</link></computeroutput> or <computeroutput>BOOST_ALL_DYN_LINK</computeroutput> instead). However, this macro can be defined and this library can be safely used as a header-only library for user code that checks contracts in a single program unit (e.g., a single program with only statically linked libraries).</para>
 </warning>
-<para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.getting_started.compilers_and_platforms"> Compilers and
-        Platforms</link> </para>
+<para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.getting_started"> Getting Started</link> </para>
 </para>
 </para></refsect1></refentry>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45123870598624"><refmeta><refentrytitle>Macro BOOST_CONTRACT_DISABLE_THREADS</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_DISABLE_THREADS</refname><refpurpose>Define this macro to not lock internal library data for thread safety (undefined by default). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45394999743888"><refmeta><refentrytitle>Macro BOOST_CONTRACT_DISABLE_THREADS</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_DISABLE_THREADS</refname><refpurpose>Define this macro to not lock internal library data for thread safety (undefined by default). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
 
 </phrase>BOOST_CONTRACT_DISABLE_THREADS</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>Defining this macro will make the library implementation code not thread safe so this macro should not be defined unless the library is being used by single-threaded applications only. This library will automatically define this macro when Boost libraries are built without threads (e.g., defining <computeroutput>BOOST_DISABLE_THREADS</computeroutput>).</para><para><note><para>When this macro is left undefined this library needs to internally use some sort of global lock (to ensure contract checking is globally disabled when other contracts are being checked and also to safely access failure handler functors). That could introduce an undesired amount of synchronization in some multi-threaded applications.</para>
 </note>
@@ -14308,28 +14546,28 @@ When used this way, this object is usually constructed and initialized to the re
 </para></refsect1></refentry>
 <refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CONTRACT_MAX_ARGS"><refmeta><refentrytitle>Macro BOOST_CONTRACT_MAX_ARGS</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_MAX_ARGS</refname><refpurpose>Maximum number of arguments for public function overrides on compilers that do not support variadic templates (default to <computeroutput>10</computeroutput>). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_MAX_ARGS</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>On compilers that do not support variadic templates, this macro is defined to the maximum number of arguments that public function overrides can have and pass to <computeroutput><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput> (users can redefine this macro to a different value). On compilers that support variadic templates, this macro has no effect.</para><para><note><para>Regardless of the value of this macro and of compiler support for variadic templates, there is an intrinsic limit of about 18 arguments for public function overrides (because of similar limits in Boost.MPL and Boost.FunctionTypes internally used by this library).</para>
+</phrase>BOOST_CONTRACT_MAX_ARGS</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>On compilers that do not support C++11 variadic templates, this macro is defined to the maximum number of arguments that public function overrides can have and pass to <computeroutput><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput> (users can redefine this macro to a different value). On compilers that support variadic templates, this macro has no effect.</para><para><note><para>Regardless of the value of this macro and of compiler support for variadic templates, there might be an intrinsic limit of about 18 arguments for public function overrides (because of similar limits in Boost.MPL and Boost.FunctionTypes internally used by this library).</para>
 </note>
 <para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.extras.no_macros__and_no_variadic_macros_"> No Macros</link> </para>
 </para>
 </para></refsect1></refentry>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45123870587168"><refmeta><refentrytitle>Macro BOOST_CONTRACT_BASES_TYPEDEF</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_BASES_TYPEDEF</refname><refpurpose>Define the name of the base type <computeroutput>typedef</computeroutput> (<computeroutput>base_types</computeroutput> by default). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45394999732400"><refmeta><refentrytitle>Macro BOOST_CONTRACT_BASES_TYPEDEF</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_BASES_TYPEDEF</refname><refpurpose>Define the name of the base type <computeroutput>typedef</computeroutput> (<computeroutput>base_types</computeroutput> by default). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_BASES_TYPEDEF</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This macro expands to the name of the <computeroutput>typedef</computeroutput> that lists the base classes for subcontracting via <computeroutput><link linkend="BOOST_CONTRACT_BASE_TYPES">BOOST_CONTRACT_BASE_TYPES</link></computeroutput>:</para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase> <phrase role="special">:</phrase>
+</phrase>BOOST_CONTRACT_BASES_TYPEDEF</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This macro expands to the name of the <computeroutput>typedef</computeroutput> that lists the base classes for subcontracting via <computeroutput><link linkend="BOOST_CONTRACT_BASE_TYPES">BOOST_CONTRACT_BASE_TYPES</link></computeroutput>:</para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase>
     <phrase role="preprocessor">#define</phrase> <phrase role="identifier">BASES</phrase> <phrase role="keyword">public</phrase> <phrase role="identifier">b</phrase><phrase role="special">,</phrase> <phrase role="keyword">private</phrase> <phrase role="identifier">w</phrase>
-    <phrase role="identifier">BASES</phrase>
+    <phrase role="special">:</phrase> <phrase role="identifier">BASES</phrase>
 <phrase role="special">{</phrase>
     <phrase role="keyword">friend</phrase> <phrase role="keyword">class</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">:</phrase><phrase role="identifier">access</phrase><phrase role="special">;</phrase>
 
-    <phrase role="keyword">typedef</phrase> <phrase role="identifier">BOOST_CONTRACT_BASES</phrase><phrase role="special">(</phrase><phrase role="identifier">BASES</phrase><phrase role="special">)</phrase> <phrase role="identifier">BOOST_CONTRACT_TYPEDEF</phrase><phrase role="special">;</phrase>
+    <phrase role="keyword">typedef</phrase> <phrase role="identifier">BOOST_CONTRACT_BASE_TYPES</phrase><phrase role="special">(</phrase><phrase role="identifier">BASES</phrase><phrase role="special">)</phrase> <phrase role="identifier">BOOST_CONTRACT_TYPEDEF</phrase><phrase role="special">;</phrase>
     <phrase role="preprocessor">#undef</phrase> <phrase role="identifier">BASES</phrase>
 
     <phrase role="special">...</phrase>
 <phrase role="special">}</phrase><phrase role="special">;</phrase>
-</programlisting></para><para>Users can redefine this macro if the <computeroutput>typedef</computeroutput> must have a name different from <computeroutput>base_types</computeroutput> (because of name clashes in user code, etc.).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.base_classes__subcontracting_"> Base Classes</link> </para>
+</programlisting></para><para>When used this way, users can redefine this macro if the <computeroutput>typedef</computeroutput> must have a name different from <computeroutput>base_types</computeroutput> (because of name clashes in user code, etc.).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.base_classes__subcontracting_"> Base Classes</link> </para>
 </para>
 </para></refsect1></refentry>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45123870579312"><refmeta><refentrytitle>Macro BOOST_CONTRACT_INVARIANT_FUNC</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_INVARIANT_FUNC</refname><refpurpose>Define the name of the class invariant member function (<computeroutput>invariant</computeroutput> by default). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45394999724496"><refmeta><refentrytitle>Macro BOOST_CONTRACT_INVARIANT_FUNC</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_INVARIANT_FUNC</refname><refpurpose>Define the name of the class invariant member function (<computeroutput>invariant</computeroutput> by default). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
 
 </phrase>BOOST_CONTRACT_INVARIANT_FUNC</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This macro expands to the name of the <computeroutput>const</computeroutput> and <computeroutput>const volatile</computeroutput> member functions that check class invariants and volatile class invariants respectively:</para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase> <phrase role="special">{</phrase>
     <phrase role="keyword">friend</phrase> <phrase role="keyword">class</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">access</phrase><phrase role="special">;</phrase>
@@ -14346,13 +14584,13 @@ When used this way, this object is usually constructed and initialized to the re
 
     <phrase role="special">...</phrase>
 <phrase role="special">}</phrase><phrase role="special">;</phrase>
-</programlisting></para><para>Users can redefine this macro if the invariant functions must have a name different from <computeroutput>invariant</computeroutput> (because of name clashes in user code, etc.).</para><para><note><para>C++ does not allow to overload member functions based on the <computeroutput>static</computeroutput> classifier, so this macro must always be defined to be different than the function name defined for  <computeroutput><link linkend="BOOST_CO_idm45123870569600">BOOST_CONTRACT_STATIC_INVARIANT_FUNC</link></computeroutput>.</para>
+</programlisting></para><para>When used this way, users can redefine this macro if the invariant functions must have a name different from <computeroutput>invariant</computeroutput> (because of name clashes in user code, etc.).</para><para><note><para>C++ does not allow to overload member functions based on the <computeroutput>static</computeroutput> classifier, so this macro must always be defined to be different than the function name defined for  <computeroutput><link linkend="BOOST_CO_idm45394999714768">BOOST_CONTRACT_STATIC_INVARIANT_FUNC</link></computeroutput>.</para>
 </note>
 <para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.class_invariants"> Class Invariants</link>,  <link linkend="boost_contract.extras.volatile_public_functions">
         Volatile Public Functions</link> </para>
 </para>
 </para></refsect1></refentry>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45123870569600"><refmeta><refentrytitle>Macro BOOST_CONTRACT_STATIC_INVARIANT_FUNC</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_STATIC_INVARIANT_FUNC</refname><refpurpose>Define the name of the static invariant member function (<computeroutput>static_invariant</computeroutput> by default). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45394999714768"><refmeta><refentrytitle>Macro BOOST_CONTRACT_STATIC_INVARIANT_FUNC</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_STATIC_INVARIANT_FUNC</refname><refpurpose>Define the name of the static invariant member function (<computeroutput>static_invariant</computeroutput> by default). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
 
 </phrase>BOOST_CONTRACT_STATIC_INVARIANT_FUNC</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This macro expands to the name of the <computeroutput>static</computeroutput> member function that checks static class invariants:</para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase> <phrase role="special">{</phrase>
     <phrase role="keyword">friend</phrase> <phrase role="keyword">class</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">access</phrase><phrase role="special">;</phrase>
@@ -14364,7 +14602,7 @@ When used this way, this object is usually constructed and initialized to the re
 
     <phrase role="special">...</phrase>
 <phrase role="special">}</phrase><phrase role="special">;</phrase>
-</programlisting></para><para>Users can redefine this macro if the static invariant function must have a name different from <computeroutput>static_invariant</computeroutput> (because of name clashes in user code, etc.).</para><para><note><para>C++ does not allow to overload member functions based on the <computeroutput>static</computeroutput> classifier, so this macro must always be defined to be different than the function name defined for  <computeroutput><link linkend="BOOST_CO_idm45123870579312">BOOST_CONTRACT_INVARIANT_FUNC</link></computeroutput>.</para>
+</programlisting></para><para>When used this way, users can redefine this macro if the static invariant function must have a name different from <computeroutput>static_invariant</computeroutput> (because of name clashes in user code, etc.).</para><para><note><para>C++ does not allow to overload member functions based on the <computeroutput>static</computeroutput> classifier, so this macro must always be defined to be different than the function name defined for  <computeroutput><link linkend="BOOST_CO_idm45394999724496">BOOST_CONTRACT_INVARIANT_FUNC</link></computeroutput>.</para>
 </note>
 <para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.class_invariants"> Class Invariants</link> </para>
 </para>
@@ -14372,133 +14610,133 @@ When used this way, this object is usually constructed and initialized to the re
 <refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CONTRACT_PERMISSIVE"><refmeta><refentrytitle>Macro BOOST_CONTRACT_PERMISSIVE</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_PERMISSIVE</refname><refpurpose>Disable some compile-time errors generated by this library (undefined by default). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
 
 </phrase>BOOST_CONTRACT_PERMISSIVE</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>Defining this macro disables a number of static checks and related compile-time errors generated by this library, for example:</para><para><itemizedlist>
-<listitem><para>The static invariant member <computeroutput>BOOST_CONTRACT_STATIC_INVARIANT_FUNC</computeroutput> function must be declared <computeroutput>static</computeroutput>. </para>
+<listitem><para>The static invariant member function named as <computeroutput>BOOST_CONTRACT_STATIC_INVARIANT_FUNC</computeroutput> must be declared <computeroutput>static</computeroutput>. </para>
 </listitem>
-<listitem><para>Non-static invariant member functions <computeroutput>BOOST_CONTRACT_INVARIANT_FUNC</computeroutput> must be declared either <computeroutput>const</computeroutput>, <computeroutput>const volatile</computeroutput>, or <computeroutput>volatile const</computeroutput>. </para>
+<listitem><para>Non-static invariant member functions named as <computeroutput>BOOST_CONTRACT_INVARIANT_FUNC</computeroutput> must be declared either <computeroutput>const</computeroutput>, <computeroutput>const volatile</computeroutput>, or <computeroutput>volatile const</computeroutput>. </para>
 </listitem>
-<listitem><para>Derived classes that program contracts for one or more public function overrides via <computeroutput><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput> must also define the <computeroutput><link linkend="BOOST_CONTRACT_BASE_TYPES">BOOST_CONTRACT_BASE_TYPES</link></computeroutput> <computeroutput>typedef</computeroutput>.</para>
+<listitem><para>Derived classes that program contracts for one or more public function overrides via <computeroutput><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput> must also define the <computeroutput><link linkend="BOOST_CONTRACT_BASE_TYPES">BOOST_CONTRACT_BASE_TYPES</link></computeroutput> <computeroutput>typedef</computeroutput>.</para>
 </listitem>
 </itemizedlist>
 In general, it is not recommended to define this macro because these compile-time checks can guard against misuses of this library.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.class_invariants"> Class Invariants</link>,  <link linkend="boost_contract.tutorial.base_classes__subcontracting_"> Base Classes</link> </para>
 </para>
 </para></refsect1></refentry>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45123870548928"><refmeta><refentrytitle>Macro BOOST_CONTRACT_ON_MISSING_CHECK_DECL</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_ON_MISSING_CHECK_DECL</refname><refpurpose>Code block to execute if contracts are not assigned to a  <computeroutput><link linkend="boost.contract.check">boost::contract::check</link></computeroutput> variable (undefined by default and executes <computeroutput>BOOST_ASSERT(false)</computeroutput>). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45394999694064"><refmeta><refentrytitle>Macro BOOST_CONTRACT_ON_MISSING_CHECK_DECL</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_ON_MISSING_CHECK_DECL</refname><refpurpose>Code block to execute if contracts are not assigned to a  <computeroutput><link linkend="boost.contract.check">boost::contract::check</link></computeroutput> variable (undefined and executes <computeroutput>BOOST_ASSERT(false)</computeroutput> by default). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_ON_MISSING_CHECK_DECL</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>In general, there is a logic error in the program when contracts are not assigned to a local variable of type <computeroutput><link linkend="boost.contract.check">boost::contract::check</link></computeroutput> (because that is a misuse of this library). Therefore, by default (i.e., when this macro is not defined) this library calls <computeroutput>BOOST_ASSERT(false)</computeroutput> in those cases. If this macro is defined, this library will execute the code expanded by the macro instead of calling <computeroutput>BOOST_ASSERT(false)</computeroutput> (if programmers prefer to throw an exception, etc.).</para><para>This macro can be defined to be any block of code (use empty curly brackets <computeroutput>{}</computeroutput> to generate no error), for example (on GCC): <programlisting><phrase role="special">-</phrase><phrase role="identifier">DBOOST_CONTRACT_ON_MISSING_CHECK_DECL</phrase><phrase role="special">=</phrase><phrase role="char">'{ throw std::logic_error("missing contract check declaration"); }'</phrase>
+</phrase>BOOST_CONTRACT_ON_MISSING_CHECK_DECL</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>In general, there is a logic error in the program when contracts are not explicitly assigned to a local variable of type  <computeroutput><link linkend="boost.contract.check">boost::contract::check</link></computeroutput> and without using C++11 <computeroutput>auto</computeroutput> declarations (because that is a misuse of this library). Therefore, by default (i.e., when this macro is not defined) this library calls <computeroutput>BOOST_ASSERT(false)</computeroutput> in those cases. If this macro is defined, this library will execute the code expanded by this macro instead of calling <computeroutput>BOOST_ASSERT(false)</computeroutput> (if programmers prefer to throw an exception, etc.).</para><para>This macro can also be defined to be any block of code (and use empty curly brackets <computeroutput>{}</computeroutput> to generate no error, not recommended), for example (on GCC): <programlisting><phrase role="identifier">gcc</phrase> <phrase role="special">-</phrase><phrase role="identifier">DBOOST_CONTRACT_ON_MISSING_CHECK_DECL</phrase><phrase role="special">=</phrase><phrase role="char">'{ throw std::logic_error("missing contract check declaration"); }'</phrase> <phrase role="special">...</phrase>
 </programlisting></para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial"> Tutorial</link> </para>
 </para>
 </para></refsect1></refentry>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45123870540560"><refmeta><refentrytitle>Macro BOOST_CONTRACT_PRECONDITIONS_DISABLE_NO_ASSERTION</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_PRECONDITIONS_DISABLE_NO_ASSERTION</refname><refpurpose>Define this macro to not disable other assertions while checking preconditions (undefined by default). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45394999685184"><refmeta><refentrytitle>Macro BOOST_CONTRACT_PRECONDITIONS_DISABLE_NO_ASSERTION</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_PRECONDITIONS_DISABLE_NO_ASSERTION</refname><refpurpose>Define this macro to not disable other assertions while checking preconditions (undefined by default). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_PRECONDITIONS_DISABLE_NO_ASSERTION</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>Not disabling other assertions while checking preconditions can lead to infinite recursion in user code so by default this macro is not defined.</para><para>However, the <link linkend="boost_contract.bibliography"> [1962]</link> proposal does not disable assertions while checking preconditions because arguments can reach the function body unchecked if assertions are disabled while checking preconditions (e.g., when these same functions bodies are called to check the preconditions in question). This macro can be defined to obtain the behaviour specified in  <link linkend="boost_contract.bibliography"> [1962]</link> (at the risk of infinite recursion).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.contract_programming_overview.feature_summary">
+</phrase>BOOST_CONTRACT_PRECONDITIONS_DISABLE_NO_ASSERTION</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>Not disabling other assertions while checking preconditions can lead to infinite recursion in user code so by default this macro is not defined.</para><para>However, the <link linkend="boost_contract.bibliography"> [N1962]</link> proposal does not disable assertions while checking preconditions because arguments can reach the function body unchecked if assertions are disabled while checking preconditions (e.g., when these same functions bodies are called to check the preconditions in question). This macro can be defined to obtain the behaviour specified in  <link linkend="boost_contract.bibliography"> [N1962]</link> (at the risk of infinite recursion).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.contract_programming_overview.feature_summary">
         Feature Summary</link> </para>
 </para>
 </para></refsect1></refentry>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45123870534752"><refmeta><refentrytitle>Macro BOOST_CONTRACT_ALL_DISABLE_NO_ASSERTION</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_ALL_DISABLE_NO_ASSERTION</refname><refpurpose>Define this macro to not disable any assertion while checking other assertions (undefined by default). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45394999679376"><refmeta><refentrytitle>Macro BOOST_CONTRACT_ALL_DISABLE_NO_ASSERTION</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_ALL_DISABLE_NO_ASSERTION</refname><refpurpose>Define this macro to not disable any assertion while checking other assertions (undefined by default). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_ALL_DISABLE_NO_ASSERTION</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>Not disabling assertions while checking other assertions can lead to infinite recursion in user code so by default this macro is not defined. (Defining this macro automatically implies that other assertion checking is disabled while checking preconditions as if  <computeroutput><link linkend="BOOST_CO_idm45123870540560">BOOST_CONTRACT_PRECONDITIONS_DISABLE_NO_ASSERTION</link></computeroutput> was also defined.)</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.contract_programming_overview.feature_summary">
+</phrase>BOOST_CONTRACT_ALL_DISABLE_NO_ASSERTION</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>Not disabling assertions while checking other assertions can lead to infinite recursion in user code so by default this macro is not defined. (Defining this macro automatically implies that other assertion checking is disabled while checking preconditions as if  <computeroutput><link linkend="BOOST_CO_idm45394999685184">BOOST_CONTRACT_PRECONDITIONS_DISABLE_NO_ASSERTION</link></computeroutput> was also defined.)</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.contract_programming_overview.feature_summary">
         Feature Summary</link> </para>
 </para>
 </para></refsect1></refentry>
 <refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CONTRACT_AUDITS"><refmeta><refentrytitle>Macro BOOST_CONTRACT_AUDITS</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_AUDITS</refname><refpurpose>Define this macro to evaluate and check audit assertions at run-time (undefined by default). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_AUDITS</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>Audit assertions and implementation checks programmed via  <computeroutput><link linkend="BOOST_CO_idm45123871181520">BOOST_CONTRACT_ASSERT_AUDIT</link></computeroutput> and  <computeroutput><link linkend="BOOST_CONTRACT_CHECK_AUDIT">BOOST_CONTRACT_CHECK_AUDIT</link></computeroutput> are always compiled and validated syntactically. However, they are not evaluated and checked at run-time unless this macro is defined (because these conditions can be computationally expensive, at least compared to the cost of executing the function body).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.extras.assertion_levels"> Assertion Levels</link> </para>
+</phrase>BOOST_CONTRACT_AUDITS</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>Audit assertions and implementation checks programmed via  <computeroutput><link linkend="BOOST_CO_idm45395000817520">BOOST_CONTRACT_ASSERT_AUDIT</link></computeroutput> and  <computeroutput><link linkend="BOOST_CONTRACT_CHECK_AUDIT">BOOST_CONTRACT_CHECK_AUDIT</link></computeroutput> are always compiled and validated syntactically. However, they are not evaluated and checked at run-time unless this macro is defined (because these conditions can be computationally expensive, at least compared to the computational cost of executing the function body).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.extras.assertion_levels"> Assertion Levels</link> </para>
 </para>
 </para></refsect1></refentry>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CONTRACT_NO_CHECKS"><refmeta><refentrytitle>Macro BOOST_CONTRACT_NO_CHECKS</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_NO_CHECKS</refname><refpurpose>If defined, this library does not perform implementation checks (undefined by default). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CONTRACT_NO_CHECKS"><refmeta><refentrytitle>Macro BOOST_CONTRACT_NO_CHECKS</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_NO_CHECKS</refname><refpurpose>If defined, this library disables implementation checks (undefined by default). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_NO_CHECKS</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>If this macro is defined, this library internal code is also optimized to reduce compile-time (not just run-time) overhead associated with implementation checks. Users can manually program <computeroutput>#ifndef</computeroutput> statements in their code using this macro to completely disable compilation of implementation checks or use  <computeroutput><link linkend="BOOST_CONTRACT_CHECK">BOOST_CONTRACT_CHECK</link></computeroutput> (recommended).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.advanced.implementation_checks">
+</phrase>BOOST_CONTRACT_NO_CHECKS</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>If this macro is defined, this library internal code is also optimized to reduce compile-time (not just run-time) overhead associated with implementation checks. In addition, users can manually program <computeroutput>#ifndef</computeroutput> statements in their code using this macro to completely disable compilation of implementation checks or use <computeroutput><link linkend="BOOST_CONTRACT_CHECK">BOOST_CONTRACT_CHECK</link></computeroutput> (recommended).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.advanced.implementation_checks">
         Implementation Checks</link>,  <link linkend="boost_contract.extras.disable_contract_checking">
         Disable Contract Checking</link>,  <link linkend="boost_contract.extras.disable_contract_compilation__macro_interface_">
         Disable Contract Compilation</link> </para>
 </para>
 </para></refsect1></refentry>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45123870517808"><refmeta><refentrytitle>Macro BOOST_CONTRACT_NO_PRECONDITIONS</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_NO_PRECONDITIONS</refname><refpurpose>If defined, this library does not check preconditions (undefined by default). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45394999662416"><refmeta><refentrytitle>Macro BOOST_CONTRACT_NO_PRECONDITIONS</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_NO_PRECONDITIONS</refname><refpurpose>If defined, this library does not check preconditions (undefined by default). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_NO_PRECONDITIONS</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>If this macro is defined, this library internal code is also optimized to reduce compile-time (not just run-time) overhead associated with checking preconditions. Users can manually program <computeroutput>#ifndef</computeroutput> statements in their code using this macro to completely disable compilation of preconditions or use the macros defined in <computeroutput>boost/contract_macro.hpp</computeroutput> (recommended only for applications where it is truly necessary to completely remove contract code compilation from production code).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.preconditions"> Preconditions</link>,  <link linkend="boost_contract.extras.disable_contract_checking">
+</phrase>BOOST_CONTRACT_NO_PRECONDITIONS</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>If this macro is defined, this library internal code is also optimized to reduce compile-time (not just run-time) overhead associated with checking preconditions. In addition, users can manually program <computeroutput>#ifndef</computeroutput> statements in their code using this macro to completely disable compilation of preconditions or use the macros defined in <computeroutput>boost/contract_macro.hpp</computeroutput> (recommended only for applications where it is truly necessary to completely remove contract code compilation from production code).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.preconditions"> Preconditions</link>,  <link linkend="boost_contract.extras.disable_contract_checking">
         Disable Contract Checking</link>,  <link linkend="boost_contract.extras.disable_contract_compilation__macro_interface_">
         Disable Contract Compilation</link> </para>
 </para>
 </para></refsect1></refentry>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45123870511440"><refmeta><refentrytitle>Macro BOOST_CONTRACT_NO_POSTCONDITIONS</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_NO_POSTCONDITIONS</refname><refpurpose>If defined, this library does not check postconditions (undefined by default). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45394999656032"><refmeta><refentrytitle>Macro BOOST_CONTRACT_NO_POSTCONDITIONS</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_NO_POSTCONDITIONS</refname><refpurpose>If defined, this library does not check postconditions (undefined by default). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_NO_POSTCONDITIONS</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>If this macro is defined, this library internal code is also optimized to reduce compile-time (not just run-time) overhead associated with checking postconditions. Users can manually program <computeroutput>#ifndef</computeroutput> statements in their code using this macro to completely disable compilation of postconditions or use the macros defined in <computeroutput>boost/contract_macro.hpp</computeroutput> (recommended only for applications where it is truly necessary to completely remove contract code compilation from production code).</para><para>It is necessary to disable both postconditions and exception guarantees defining <computeroutput><link linkend="BOOST_CO_idm45123870511440">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput> and  <computeroutput><link linkend="BOOST_CONTRACT_NO_EXCEPTS">BOOST_CONTRACT_NO_EXCEPTS</link></computeroutput> in order to disable old value copies (see <computeroutput><link linkend="BOOST_CONTRACT_NO_OLDS">BOOST_CONTRACT_NO_OLDS</link></computeroutput>).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.postconditions"> Postconditions</link>,  <link linkend="boost_contract.extras.disable_contract_checking">
+</phrase>BOOST_CONTRACT_NO_POSTCONDITIONS</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>If this macro is defined, this library internal code is also optimized to reduce compile-time (not just run-time) overhead associated with checking postconditions. In addition, users can manually program <computeroutput>#ifndef</computeroutput> statements in their code using this macro to completely disable compilation of postconditions or use the macros defined in <computeroutput>boost/contract_macro.hpp</computeroutput> (recommended only for applications where it is truly necessary to completely remove contract code compilation from production code).</para><para>It is necessary to disable both postconditions and exception guarantees defining <computeroutput><link linkend="BOOST_CO_idm45394999656032">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput> and  <computeroutput><link linkend="BOOST_CONTRACT_NO_EXCEPTS">BOOST_CONTRACT_NO_EXCEPTS</link></computeroutput> in order to disable old value copies (see <computeroutput><link linkend="BOOST_CONTRACT_NO_OLDS">BOOST_CONTRACT_NO_OLDS</link></computeroutput>).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.postconditions"> Postconditions</link>,  <link linkend="boost_contract.extras.disable_contract_checking">
         Disable Contract Checking</link>,  <link linkend="boost_contract.extras.disable_contract_compilation__macro_interface_">
         Disable Contract Compilation</link> </para>
 </para>
 </para></refsect1></refentry>
 <refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CONTRACT_NO_EXCEPTS"><refmeta><refentrytitle>Macro BOOST_CONTRACT_NO_EXCEPTS</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_NO_EXCEPTS</refname><refpurpose>If defined, this library does not check exception guarantees (undefined by default). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_NO_EXCEPTS</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>If this macro is defined, this library internal code is also optimized to reduce compile-time (not just run-time) overhead associated with checking exception guarantees. Users can manually program <computeroutput>#ifndef</computeroutput> statements in their code using this macro to completely disable compilation of exception guarantees or use the macros defined in <computeroutput>boost/contract_macro.hpp</computeroutput> (recommended only for applications where it is truly necessary to completely remove contract code compilation from production code).</para><para>It is necessary to disable both postconditions and exception guarantees defining <computeroutput><link linkend="BOOST_CO_idm45123870511440">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput> and  <computeroutput><link linkend="BOOST_CONTRACT_NO_EXCEPTS">BOOST_CONTRACT_NO_EXCEPTS</link></computeroutput> in order to disable old value copies (see <computeroutput><link linkend="BOOST_CONTRACT_NO_OLDS">BOOST_CONTRACT_NO_OLDS</link></computeroutput>).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.exception_guarantees"> Exception Guarantees</link>,  <link linkend="boost_contract.extras.disable_contract_checking">
+</phrase>BOOST_CONTRACT_NO_EXCEPTS</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>If this macro is defined, this library internal code is also optimized to reduce compile-time (not just run-time) overhead associated with checking exception guarantees. In addition, users can manually program <computeroutput>#ifndef</computeroutput> statements in their code using this macro to completely disable compilation of exception guarantees or use the macros defined in <computeroutput>boost/contract_macro.hpp</computeroutput> (recommended only for applications where it is truly necessary to completely remove contract code compilation from production code).</para><para>It is necessary to disable both postconditions and exception guarantees defining <computeroutput><link linkend="BOOST_CO_idm45394999656032">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput> and  <computeroutput><link linkend="BOOST_CONTRACT_NO_EXCEPTS">BOOST_CONTRACT_NO_EXCEPTS</link></computeroutput> in order to disable old value copies (see <computeroutput><link linkend="BOOST_CONTRACT_NO_OLDS">BOOST_CONTRACT_NO_OLDS</link></computeroutput>).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.exception_guarantees"> Exception Guarantees</link>,  <link linkend="boost_contract.extras.disable_contract_checking">
         Disable Contract Checking</link>,  <link linkend="boost_contract.extras.disable_contract_compilation__macro_interface_">
         Disable Contract Compilation</link> </para>
 </para>
 </para></refsect1></refentry>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45123870492704"><refmeta><refentrytitle>Macro BOOST_CONTRACT_NO_ENTRY_INVARIANTS</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_NO_ENTRY_INVARIANTS</refname><refpurpose>If defined, this library does not check class invariants at entry (undefined by default). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45394999637264"><refmeta><refentrytitle>Macro BOOST_CONTRACT_NO_ENTRY_INVARIANTS</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_NO_ENTRY_INVARIANTS</refname><refpurpose>If defined, this library does not check class invariants at entry (undefined by default). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_NO_ENTRY_INVARIANTS</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>If this macro is defined, this library internal code is also optimized to reduce compile-time (not just run-time) overhead associated with checking class invariants at entry. Users can manually program <computeroutput>#ifndef</computeroutput> statements in their code using this macro to completely disable compilation of entry class invariants or use the macros defined in <computeroutput>boost/contract_macro.hpp</computeroutput> (recommended only for applications where it is truly necessary to completely remove contract code compilation from production code).</para><para>This macro is automatically defined when  <computeroutput><link linkend="BOOST_CO_idm45123870477472">BOOST_CONTRACT_NO_INVARIANTS</link></computeroutput> is defined.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.class_invariants"> Class Invariants</link>,  <link linkend="boost_contract.extras.disable_contract_checking">
+</phrase>BOOST_CONTRACT_NO_ENTRY_INVARIANTS</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>If this macro is defined, this library internal code is also optimized to reduce compile-time (not just run-time) overhead associated with checking class invariants at entry. In addition, users can manually program <computeroutput>#ifndef</computeroutput> statements in their code using this macro to completely disable compilation of entry class invariants or use the macros defined in <computeroutput>boost/contract_macro.hpp</computeroutput> (recommended only for applications where it is truly necessary to completely remove contract code compilation from production code).</para><para>This macro is automatically defined when  <computeroutput><link linkend="BOOST_CO_idm45394999622032">BOOST_CONTRACT_NO_INVARIANTS</link></computeroutput> is defined.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.class_invariants"> Class Invariants</link>,  <link linkend="boost_contract.extras.disable_contract_checking">
         Disable Contract Checking</link>,  <link linkend="boost_contract.extras.disable_contract_compilation__macro_interface_">
         Disable Contract Compilation</link> </para>
 </para>
 </para></refsect1></refentry>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45123870485088"><refmeta><refentrytitle>Macro BOOST_CONTRACT_NO_EXIT_INVARIANTS</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_NO_EXIT_INVARIANTS</refname><refpurpose>If defined, this library does not check class invariants at exit (undefined by default). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45394999629648"><refmeta><refentrytitle>Macro BOOST_CONTRACT_NO_EXIT_INVARIANTS</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_NO_EXIT_INVARIANTS</refname><refpurpose>If defined, this library does not check class invariants at exit (undefined by default). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_NO_EXIT_INVARIANTS</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>If this macro is defined, this library internal code is also optimized to reduce compile-time (not just run-time) overhead associated with checking class invariants at exit. Users can manually program <computeroutput>#ifndef</computeroutput> statements in their code using this macro to completely disable compilation of exit class invariants or use the macros defined in <computeroutput>boost/contract_macro.hpp</computeroutput> (recommended only for applications where it is truly necessary to completely remove contract code compilation from production code).</para><para>This macro is automatically defined when  <computeroutput><link linkend="BOOST_CO_idm45123870477472">BOOST_CONTRACT_NO_INVARIANTS</link></computeroutput> is defined.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.class_invariants"> Class Invariants</link>,  <link linkend="boost_contract.extras.disable_contract_checking">
+</phrase>BOOST_CONTRACT_NO_EXIT_INVARIANTS</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>If this macro is defined, this library internal code is also optimized to reduce compile-time (not just run-time) overhead associated with checking class invariants at exit. In addition, users can manually program <computeroutput>#ifndef</computeroutput> statements in their code using this macro to completely disable compilation of exit class invariants or use the macros defined in <computeroutput>boost/contract_macro.hpp</computeroutput> (recommended only for applications where it is truly necessary to completely remove contract code compilation from production code).</para><para>This macro is automatically defined when  <computeroutput><link linkend="BOOST_CO_idm45394999622032">BOOST_CONTRACT_NO_INVARIANTS</link></computeroutput> is defined.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.class_invariants"> Class Invariants</link>,  <link linkend="boost_contract.extras.disable_contract_checking">
         Disable Contract Checking</link>,  <link linkend="boost_contract.extras.disable_contract_compilation__macro_interface_">
         Disable Contract Compilation</link> </para>
 </para>
 </para></refsect1></refentry>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45123870477472"><refmeta><refentrytitle>Macro BOOST_CONTRACT_NO_INVARIANTS</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_NO_INVARIANTS</refname><refpurpose>If defined, this library does not check class invariants (undefined by default). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45394999622032"><refmeta><refentrytitle>Macro BOOST_CONTRACT_NO_INVARIANTS</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_NO_INVARIANTS</refname><refpurpose>If defined, this library does not check class invariants (undefined by default). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_NO_INVARIANTS</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>If this macro is defined, this library internal code is also optimized to reduce compile-time (not just run-time) overhead associated with checking class invariants. Users can manually program <computeroutput>#ifndef</computeroutput> statements in their code using this macro to completely disable compilation of class invariants or use the macros defined in <computeroutput>boost/contract_macro.hpp</computeroutput> (recommended only for applications where it is truly necessary to completely remove contract code compilation from production code).</para><para>Defining this macro is equivalent to defining both  <computeroutput><link linkend="BOOST_CO_idm45123870492704">BOOST_CONTRACT_NO_ENTRY_INVARIANTS</link></computeroutput> and  <computeroutput><link linkend="BOOST_CO_idm45123870485088">BOOST_CONTRACT_NO_EXIT_INVARIANTS</link></computeroutput>.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.class_invariants"> Class Invariants</link>,  <link linkend="boost_contract.extras.disable_contract_checking">
+</phrase>BOOST_CONTRACT_NO_INVARIANTS</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>If this macro is defined, this library internal code is also optimized to reduce compile-time (not just run-time) overhead associated with checking class invariants. In addition, users can manually program <computeroutput>#ifndef</computeroutput> statements in their code using this macro to completely disable compilation of class invariants or use the macros defined in <computeroutput>boost/contract_macro.hpp</computeroutput> (recommended only for applications where it is truly necessary to completely remove contract code compilation from production code).</para><para>Defining this macro is equivalent to defining both  <computeroutput><link linkend="BOOST_CO_idm45394999637264">BOOST_CONTRACT_NO_ENTRY_INVARIANTS</link></computeroutput> and  <computeroutput><link linkend="BOOST_CO_idm45394999629648">BOOST_CONTRACT_NO_EXIT_INVARIANTS</link></computeroutput>.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.class_invariants"> Class Invariants</link>,  <link linkend="boost_contract.extras.disable_contract_checking">
         Disable Contract Checking</link>,  <link linkend="boost_contract.extras.disable_contract_compilation__macro_interface_">
         Disable Contract Compilation</link> </para>
 </para>
 </para></refsect1></refentry>
 <refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CONTRACT_NO_OLDS"><refmeta><refentrytitle>Macro BOOST_CONTRACT_NO_OLDS</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_NO_OLDS</refname><refpurpose>Automatically defined by this library when old value copies are not to be performed. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_NO_OLDS</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This library will define this macro when users define both  <computeroutput><link linkend="BOOST_CO_idm45123870511440">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput> and  <computeroutput><link linkend="BOOST_CONTRACT_NO_EXCEPTS">BOOST_CONTRACT_NO_EXCEPTS</link></computeroutput> (this macro is not a configuration macro and this library will generate a compile-time error if users try to define it directly). Users can manually program <computeroutput>#ifndef</computeroutput> statements in their code using this macro to completely disable compilation of old value copies or use the macros defined in <computeroutput>boost/contract_macro.hpp</computeroutput> (recommended only for applications where it is truly necessary to completely remove contract code compilation from production code).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.old_values"> Old Values</link>,  <link linkend="boost_contract.advanced.old_value_copies_at_body">
-        Old Value Copies at Body</link>,  <link linkend="boost_contract.extras.disable_contract_compilation__macro_interface_">
+</phrase>BOOST_CONTRACT_NO_OLDS</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This macro is not a configuration macro and this library will generate a compile-time error if users try to define it directly. This library will automatically define this macro when users define both  <computeroutput><link linkend="BOOST_CO_idm45394999656032">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput> and  <computeroutput><link linkend="BOOST_CONTRACT_NO_EXCEPTS">BOOST_CONTRACT_NO_EXCEPTS</link></computeroutput>. Users can manually program <computeroutput>#ifndef</computeroutput> statements in their code using this macro to completely disable compilation of old value copies or use the macros defined in <computeroutput>boost/contract_macro.hpp</computeroutput> (recommended only for applications where it is truly necessary to completely remove contract code compilation from production code).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.old_values"> Old Values</link>,  <link linkend="boost_contract.advanced.old_values_copied_at_body">
+        Old Values Copied at Body</link>,  <link linkend="boost_contract.extras.disable_contract_compilation__macro_interface_">
         Disable Contract Compilation</link> </para>
 </para>
 </para></refsect1></refentry>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45123870460880"><refmeta><refentrytitle>Macro BOOST_CONTRACT_NO_CONSTRUCTORS</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_NO_CONSTRUCTORS</refname><refpurpose>Automatically defined by this library when contracts are not checked for constructors. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45394999605408"><refmeta><refentrytitle>Macro BOOST_CONTRACT_NO_CONSTRUCTORS</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_NO_CONSTRUCTORS</refname><refpurpose>Automatically defined by this library when contracts are not checked for constructors. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_NO_CONSTRUCTORS</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This library will define this macro when users define all  <computeroutput><link linkend="BOOST_CO_idm45123870477472">BOOST_CONTRACT_NO_INVARIANTS</link></computeroutput>,  <computeroutput><link linkend="BOOST_CO_idm45123870511440">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput>, and  <computeroutput><link linkend="BOOST_CONTRACT_NO_EXCEPTS">BOOST_CONTRACT_NO_EXCEPTS</link></computeroutput> (this macro is not a configuration macro and this library will generate a compile-time error if users try to define it directly). Users can manually program <computeroutput>#ifndef</computeroutput> statements in their code using this macro to completely disable compilation of contracts for constructors or use the macros defined in <computeroutput>boost/contract_macro.hpp</computeroutput> (recommended only for applications where it is truly necessary to completely remove contract code compilation from production code).</para><para><note><para>Constructor preconditions are checked separately by  <computeroutput><link linkend="boost.contract.constructor_precondition">boost::contract::constructor_precondition</link></computeroutput> so they are disabled by <computeroutput><link linkend="BOOST_CO_idm45123870517808">BOOST_CONTRACT_NO_PRECONDITIONS</link></computeroutput> instead.</para>
+</phrase>BOOST_CONTRACT_NO_CONSTRUCTORS</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This macro is not a configuration macro and this library will generate a compile-time error if users try to define it directly. This library will automatically define this macro when users define all  <computeroutput><link linkend="BOOST_CO_idm45394999622032">BOOST_CONTRACT_NO_INVARIANTS</link></computeroutput>,  <computeroutput><link linkend="BOOST_CO_idm45394999656032">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput>, and  <computeroutput><link linkend="BOOST_CONTRACT_NO_EXCEPTS">BOOST_CONTRACT_NO_EXCEPTS</link></computeroutput>. Users can manually program <computeroutput>#ifndef</computeroutput> statements in their code using this macro to completely disable compilation of contracts for constructors or use the macros defined in <computeroutput>boost/contract_macro.hpp</computeroutput> (recommended only for applications where it is truly necessary to completely remove contract code compilation from production code).</para><para><note><para>Constructor preconditions are checked separately by  <computeroutput><link linkend="boost.contract.constructor_precondition">boost::contract::constructor_precondition</link></computeroutput> so they are disabled by <computeroutput><link linkend="BOOST_CO_idm45394999662416">BOOST_CONTRACT_NO_PRECONDITIONS</link></computeroutput> instead.</para>
 </note>
 <para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.constructors"> Constructors</link>,  <link linkend="boost_contract.extras.disable_contract_compilation__macro_interface_">
         Disable Contract Compilation</link> </para>
 </para>
 </para></refsect1></refentry>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45123870450032"><refmeta><refentrytitle>Macro BOOST_CONTRACT_NO_DESTRUCTORS</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_NO_DESTRUCTORS</refname><refpurpose>Automatically defined by this library when contracts are not checked for destructors. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45394999594544"><refmeta><refentrytitle>Macro BOOST_CONTRACT_NO_DESTRUCTORS</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_NO_DESTRUCTORS</refname><refpurpose>Automatically defined by this library when contracts are not checked for destructors. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_NO_DESTRUCTORS</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This library will define this macro when users define all  <computeroutput><link linkend="BOOST_CO_idm45123870477472">BOOST_CONTRACT_NO_INVARIANTS</link></computeroutput>,  <computeroutput><link linkend="BOOST_CO_idm45123870511440">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput>, and  <computeroutput><link linkend="BOOST_CONTRACT_NO_EXCEPTS">BOOST_CONTRACT_NO_EXCEPTS</link></computeroutput> (this macro is not a configuration macro and this library will generate a compile-time error if users try to define it directly). Users can manually program <computeroutput>#ifndef</computeroutput> statements in their code using this macro to completely disable compilation of contracts for destructors or use the macros defined in <computeroutput>boost/contract_macro.hpp</computeroutput> (recommended only for applications where it is truly necessary to completely remove contract code compilation from production code).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.destructors"> Destructors</link>,  <link linkend="boost_contract.extras.disable_contract_compilation__macro_interface_">
+</phrase>BOOST_CONTRACT_NO_DESTRUCTORS</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This macro is not a configuration macro and this library will generate a compile-time error if users try to define it directly. This library will automatically define this macro when users define all  <computeroutput><link linkend="BOOST_CO_idm45394999622032">BOOST_CONTRACT_NO_INVARIANTS</link></computeroutput>,  <computeroutput><link linkend="BOOST_CO_idm45394999656032">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput>, and  <computeroutput><link linkend="BOOST_CONTRACT_NO_EXCEPTS">BOOST_CONTRACT_NO_EXCEPTS</link></computeroutput>. Users can manually program <computeroutput>#ifndef</computeroutput> statements in their code using this macro to completely disable compilation of contracts for destructors or use the macros defined in <computeroutput>boost/contract_macro.hpp</computeroutput> (recommended only for applications where it is truly necessary to completely remove contract code compilation from production code).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.destructors"> Destructors</link>,  <link linkend="boost_contract.extras.disable_contract_compilation__macro_interface_">
         Disable Contract Compilation</link> </para>
 </para>
 </para></refsect1></refentry>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45123870441776"><refmeta><refentrytitle>Macro BOOST_CONTRACT_NO_PUBLIC_FUNCTIONS</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_NO_PUBLIC_FUNCTIONS</refname><refpurpose>Automatically defined by this library when contracts are not checked for public functions. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45394999586272"><refmeta><refentrytitle>Macro BOOST_CONTRACT_NO_PUBLIC_FUNCTIONS</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_NO_PUBLIC_FUNCTIONS</refname><refpurpose>Automatically defined by this library when contracts are not checked for public functions. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_NO_PUBLIC_FUNCTIONS</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This library will define this macro when users define all  <computeroutput><link linkend="BOOST_CO_idm45123870477472">BOOST_CONTRACT_NO_INVARIANTS</link></computeroutput>,  <computeroutput><link linkend="BOOST_CO_idm45123870517808">BOOST_CONTRACT_NO_PRECONDITIONS</link></computeroutput>,  <computeroutput><link linkend="BOOST_CO_idm45123870511440">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput>, and  <computeroutput><link linkend="BOOST_CONTRACT_NO_EXCEPTS">BOOST_CONTRACT_NO_EXCEPTS</link></computeroutput> (this macro is not a configuration macro and this library will generate a compile-time error if users try to define it directly). Users can manually program <computeroutput>#ifndef</computeroutput> statements in their code using this macro to completely disable compilation of contracts for public functions or use the macros defined in <computeroutput>boost/contract_macro.hpp</computeroutput> (recommended only for applications where it is truly necessary to completely remove contract code compilation from production code).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.public_functions"> Public Functions</link>,  <link linkend="boost_contract.extras.disable_contract_compilation__macro_interface_">
+</phrase>BOOST_CONTRACT_NO_PUBLIC_FUNCTIONS</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This macro is not a configuration macro and this library will generate a compile-time error if users try to define it directly. This library will automatically define this macro when users define all  <computeroutput><link linkend="BOOST_CO_idm45394999622032">BOOST_CONTRACT_NO_INVARIANTS</link></computeroutput>,  <computeroutput><link linkend="BOOST_CO_idm45394999662416">BOOST_CONTRACT_NO_PRECONDITIONS</link></computeroutput>,  <computeroutput><link linkend="BOOST_CO_idm45394999656032">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput>, and  <computeroutput><link linkend="BOOST_CONTRACT_NO_EXCEPTS">BOOST_CONTRACT_NO_EXCEPTS</link></computeroutput>. Users can manually program <computeroutput>#ifndef</computeroutput> statements in their code using this macro to completely disable compilation of contracts for public functions or use the macros defined in <computeroutput>boost/contract_macro.hpp</computeroutput> (recommended only for applications where it is truly necessary to completely remove contract code compilation from production code).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.public_functions"> Public Functions</link>,  <link linkend="boost_contract.extras.disable_contract_compilation__macro_interface_">
         Disable Contract Compilation</link> </para>
 </para>
 </para></refsect1></refentry>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45123870432592"><refmeta><refentrytitle>Macro BOOST_CONTRACT_NO_FUNCTIONS</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_NO_FUNCTIONS</refname><refpurpose>Automatically defined by this library when contracts are not checked for non-member, private and protected functions. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45394999577072"><refmeta><refentrytitle>Macro BOOST_CONTRACT_NO_FUNCTIONS</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_NO_FUNCTIONS</refname><refpurpose>Automatically defined by this library when contracts are not checked for non-member, private, or protected functions. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_NO_FUNCTIONS</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This library will define this macro when users define all  <computeroutput><link linkend="BOOST_CO_idm45123870517808">BOOST_CONTRACT_NO_PRECONDITIONS</link></computeroutput>,  <computeroutput><link linkend="BOOST_CO_idm45123870511440">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput>, and  <computeroutput><link linkend="BOOST_CONTRACT_NO_EXCEPTS">BOOST_CONTRACT_NO_EXCEPTS</link></computeroutput> (this macro is not a configuration macro and this library will generate a compile-time error if users try to define it directly). Users can manually program <computeroutput>#ifndef</computeroutput> statements in their code using this macro to completely disable compilation of contracts for non-member, private and protected functions, or use the macros defined in <computeroutput>boost/contract_macro.hpp</computeroutput> (recommended only for applications where it is truly necessary to completely remove contract code compilation from production code).</para><para>This macro is also used when contracts are not checked for private and protected functions, lambda functions, code blocks, loops, etc.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.non_member_functions"> Non-Member Functions</link>,  <link linkend="boost_contract.advanced.private_and_protected_functions">
+</phrase>BOOST_CONTRACT_NO_FUNCTIONS</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This macro is not a configuration macro and this library will generate a compile-time error if users try to define it directly. This library will automatically define this macro when users define all  <computeroutput><link linkend="BOOST_CO_idm45394999662416">BOOST_CONTRACT_NO_PRECONDITIONS</link></computeroutput>,  <computeroutput><link linkend="BOOST_CO_idm45394999656032">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput>, and  <computeroutput><link linkend="BOOST_CONTRACT_NO_EXCEPTS">BOOST_CONTRACT_NO_EXCEPTS</link></computeroutput>. Users can manually program <computeroutput>#ifndef</computeroutput> statements in their code using this macro to completely disable compilation of contracts for non-member, private and protected functions, or use the macros defined in <computeroutput>boost/contract_macro.hpp</computeroutput> (recommended only for applications where it is truly necessary to completely remove contract code compilation from production code).</para><para>This macro is also used when contracts are not checked for private or protected functions, lambda functions, code blocks, loops, etc.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.non_member_functions"> Non-Member Functions</link>,  <link linkend="boost_contract.advanced.private_and_protected_functions">
         Private and Protected Functions</link>,  <link linkend="boost_contract.advanced.lambdas__loops__code_blocks__and__constexpr__">
         Lambdas, Loops, Code Blocks</link>,  <link linkend="boost_contract.extras.disable_contract_compilation__macro_interface_">
         Disable Contract Compilation</link> </para>
 </para>
 </para></refsect1></refentry>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45123870422272"><refmeta><refentrytitle>Macro BOOST_CONTRACT_NO_CONDITIONS</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_NO_CONDITIONS</refname><refpurpose>Automatically defined by this library when contracts are not checked for preconditions, postconditions, exceptions guarantees, and class invariants (excluding implementation checks). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45394999566736"><refmeta><refentrytitle>Macro BOOST_CONTRACT_NO_CONDITIONS</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_NO_CONDITIONS</refname><refpurpose>Automatically defined by this library when contracts are not checked for preconditions, postconditions, exceptions guarantees, and class invariants (excluding implementation checks). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_NO_CONDITIONS</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This library will define this macro when users define all  <computeroutput><link linkend="BOOST_CO_idm45123870517808">BOOST_CONTRACT_NO_PRECONDITIONS</link></computeroutput>,  <computeroutput><link linkend="BOOST_CO_idm45123870511440">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput>,  <computeroutput><link linkend="BOOST_CONTRACT_NO_EXCEPTS">BOOST_CONTRACT_NO_EXCEPTS</link></computeroutput>, and  <computeroutput><link linkend="BOOST_CO_idm45123870477472">BOOST_CONTRACT_NO_INVARIANTS</link></computeroutput> (this macro is not a configuration macro and this library will generate a compile-time error if users try to define it directly). Users can manually program <computeroutput>#ifndef</computeroutput> statements in their code using this macro to completely disable compilation of contracts within specifications or use the macros defined in <computeroutput>boost/contract_macro.hpp</computeroutput> (recommended only for applications where it is truly necessary to completely remove contract code compilation from production code).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.extras.disable_contract_compilation__macro_interface_">
+</phrase>BOOST_CONTRACT_NO_CONDITIONS</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This macro is not a configuration macro and this library will generate a compile-time error if users try to define it directly. This library will automatically define this macro when users define all  <computeroutput><link linkend="BOOST_CO_idm45394999662416">BOOST_CONTRACT_NO_PRECONDITIONS</link></computeroutput>,  <computeroutput><link linkend="BOOST_CO_idm45394999656032">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput>,  <computeroutput><link linkend="BOOST_CONTRACT_NO_EXCEPTS">BOOST_CONTRACT_NO_EXCEPTS</link></computeroutput>, and  <computeroutput><link linkend="BOOST_CO_idm45394999622032">BOOST_CONTRACT_NO_INVARIANTS</link></computeroutput>. Users can manually program <computeroutput>#ifndef</computeroutput> statements in their code using this macro to completely disable compilation of contracts within specifications (so excluding implementation checks which are contracts within implementations instead), or use the macros defined in <computeroutput>boost/contract_macro.hpp</computeroutput> (recommended only for applications where it is truly necessary to completely remove contract code compilation from production code).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.extras.disable_contract_compilation__macro_interface_">
         Disable Contract Compilation</link> </para>
 </para>
 </para></refsect1></refentry>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CONTRACT_NO_ALL"><refmeta><refentrytitle>Macro BOOST_CONTRACT_NO_ALL</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_NO_ALL</refname><refpurpose>Automatically defined by this library when contracts are not checked at all. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CONTRACT_NO_ALL"><refmeta><refentrytitle>Macro BOOST_CONTRACT_NO_ALL</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_NO_ALL</refname><refpurpose>Automatically defined by this library when contracts are not checked at all (neither for specifications nor for implementations). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.config_hpp">boost/contract/core/config.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_NO_ALL</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This library will define this macro when users define all  <computeroutput><link linkend="BOOST_CO_idm45123870477472">BOOST_CONTRACT_NO_INVARIANTS</link></computeroutput>,  <computeroutput><link linkend="BOOST_CO_idm45123870517808">BOOST_CONTRACT_NO_PRECONDITIONS</link></computeroutput>,  <computeroutput><link linkend="BOOST_CO_idm45123870511440">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput>,  <computeroutput><link linkend="BOOST_CONTRACT_NO_EXCEPTS">BOOST_CONTRACT_NO_EXCEPTS</link></computeroutput>, and  <computeroutput><link linkend="BOOST_CONTRACT_NO_CHECKS">BOOST_CONTRACT_NO_CHECKS</link></computeroutput> (this macro is not a configuration macro and this library will generate a compile-time error if users try to define it directly). For example, users can manually program <computeroutput>#ifndef</computeroutput> statements in their code using this macro to avoid including the <computeroutput>boost/contract.hpp</computeroutput> header all together:</para><para><programlisting><phrase role="preprocessor">#include</phrase> <phrase role="special">&lt;</phrase><phrase role="identifier">boost</phrase><phrase role="special">/</phrase><phrase role="identifier">contract</phrase><phrase role="special">/</phrase><phrase role="identifier">core</phrase><phrase role="special">/</phrase><phrase role="identifier">config</phrase><phrase role="special">.</phrase><phrase role="identifier">hpp</phrase><phrase role="special">&gt;</phrase>
+</phrase>BOOST_CONTRACT_NO_ALL</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This macro is not a configuration macro and this library will generate a compile-time error if users try to define it directly. This library will automatically define this macro when users define all  <computeroutput><link linkend="BOOST_CO_idm45394999622032">BOOST_CONTRACT_NO_INVARIANTS</link></computeroutput>,  <computeroutput><link linkend="BOOST_CO_idm45394999662416">BOOST_CONTRACT_NO_PRECONDITIONS</link></computeroutput>,  <computeroutput><link linkend="BOOST_CO_idm45394999656032">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput>,  <computeroutput><link linkend="BOOST_CONTRACT_NO_EXCEPTS">BOOST_CONTRACT_NO_EXCEPTS</link></computeroutput>, and  <computeroutput><link linkend="BOOST_CONTRACT_NO_CHECKS">BOOST_CONTRACT_NO_CHECKS</link></computeroutput>. For example, users can manually program <computeroutput>#ifndef</computeroutput> statements in their code using this macro to avoid including the <computeroutput>boost/contract.hpp</computeroutput> header all together:</para><para><programlisting><phrase role="preprocessor">#include</phrase> <phrase role="special">&lt;</phrase><phrase role="identifier">boost</phrase><phrase role="special">/</phrase><phrase role="identifier">contract</phrase><phrase role="special">/</phrase><phrase role="identifier">core</phrase><phrase role="special">/</phrase><phrase role="identifier">config</phrase><phrase role="special">.</phrase><phrase role="identifier">hpp</phrase><phrase role="special">&gt;</phrase>
 <phrase role="preprocessor">#ifndef</phrase> <phrase role="identifier">BOOST_CONTRACT_NO_ALL</phrase>
     <phrase role="preprocessor">#include</phrase> <phrase role="special">&lt;</phrase><phrase role="identifier">boost</phrase><phrase role="special">/</phrase><phrase role="identifier">contract</phrase><phrase role="special">.</phrase><phrase role="identifier">hpp</phrase><phrase role="special">&gt;</phrase>
 <phrase role="preprocessor">#endif</phrase>
@@ -14518,14 +14756,16 @@ In general, it is not recommended to define this macro because these compile-tim
 <phrase role="keyword">class</phrase> <link linkend="boost.contract.constructor_precondition">constructor_precondition</link> <phrase role="special">{</phrase>
 <phrase role="keyword">public</phrase><phrase role="special">:</phrase>
   <phrase role="comment">// <link linkend="boost.contract.constructor_preconditionconstruct-copy-destruct">construct/copy/destruct</link></phrase>
-  <link linkend="idm45123870391104-bb"><phrase role="identifier">constructor_precondition</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
-  <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> <phrase role="keyword">explicit</phrase> <link linkend="idm45123870388960-bb"><phrase role="identifier">constructor_precondition</phrase></link><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+  <link linkend="idm45394999534384-bb"><phrase role="identifier">constructor_precondition</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+  <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> <phrase role="keyword">explicit</phrase> <link linkend="idm45394999532192-bb"><phrase role="identifier">constructor_precondition</phrase></link><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
 <phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This class must be the very first base of the class declaring the constructor for which preconditions are programmed (that way constructor arguments can be checked by preconditions even before they are used to initialize other base classes):</para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase>
     <phrase role="preprocessor">#define</phrase> <phrase role="identifier">BASES</phrase> <phrase role="keyword">private</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">constructor_precondition</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">u</phrase><phrase role="special">&gt;</phrase><phrase role="special">,</phrase> \
             <phrase role="keyword">public</phrase> <phrase role="identifier">b</phrase>
     <phrase role="special">:</phrase> <phrase role="identifier">BASES</phrase>
 <phrase role="special">{</phrase>
-    <phrase role="special">...</phrase>
+    <phrase role="keyword">friend</phrase> <phrase role="keyword">class</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">access</phrase><phrase role="special">;</phrase>
+
+    <phrase role="keyword">typedef</phrase> <phrase role="identifier">BOOST_CONTRACT_BASE_TYPES</phrase><phrase role="special">(</phrase><phrase role="identifier">BASES</phrase><phrase role="special">)</phrase> <phrase role="identifier">base_types</phrase><phrase role="special">;</phrase>
     <phrase role="preprocessor">#undef</phrase> <phrase role="identifier">BASES</phrase>
 
 <phrase role="keyword">public</phrase><phrase role="special">:</phrase>
@@ -14541,14 +14781,14 @@ In general, it is not recommended to define this macro because these compile-tim
 
     <phrase role="special">...</phrase>
 <phrase role="special">}</phrase><phrase role="special">;</phrase>
-</programlisting></para><para>User-defined classes should inherit privately from this class (to not alter the public interface of user-defined classes). In addition, this class should never be declared as a virtual base (because virtual bases are initialized only once across the entire inheritance hierarchy preventing preconditions of other base classes from being checked).</para><para>Unions cannot have base classes in C++ so this class can be used to declare a local object within the constructor definition just before  <computeroutput><link linkend="boost.contract.constructor">boost::contract::constructor</link></computeroutput> is used (see  <link linkend="boost_contract.extras.unions"> Unions</link>).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.constructors"> Constructors</link></para>
+</programlisting></para><para>User-defined classes should inherit privately from this class (to not alter the public interface of user-defined classes). In addition, this class should never be declared as a virtual base (because virtual bases are initialized only once across the entire inheritance hierarchy preventing preconditions of other base classes from being checked).</para><para>This class cannot be used this way in a <computeroutput>union</computeroutput> because unions cannot have base classes in C++. Instead, this class is used in a <computeroutput>union</computeroutput> to declare a local object within the constructor definition just before <computeroutput><link linkend="boost.contract.constructor">boost::contract::constructor</link></computeroutput> is used (see <link linkend="boost_contract.extras.unions"> Unions</link>).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.constructors"> Constructors</link></para>
 </para>
 
 </para><refsect2><title>Template Parameters</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">typename</phrase> Class</literallayout></para><para><para>The class type of the constructor for which preconditions are being programmed. </para></para></listitem></orderedlist></refsect2><refsect2><title><anchor id="boost.contract.constructor_preconditionconstruct-copy-destruct"/><computeroutput>constructor_precondition</computeroutput> 
         public
-       construct/copy/destruct</title><orderedlist><listitem><para><literallayout class="monospaced"><anchor id="idm45123870391104-bb"/><phrase role="identifier">constructor_precondition</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this object without specifying constructor preconditions. <para>This is implicitly called for those constructors of the contracted class that do not specify preconditions.</para><para><note><para>Calling this default constructor should amount to negligible compile-time and run-time overheads (likely to be optimized away completely by most compilers). </para>
+       construct/copy/destruct</title><orderedlist><listitem><para><literallayout class="monospaced"><anchor id="idm45394999534384-bb"/><phrase role="identifier">constructor_precondition</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this object without specifying constructor preconditions. <para>This is implicitly called for those constructors of the contracted class that do not specify preconditions.</para><para><note><para>The implementation of this library is optimized so that calling this default constructor should amount to negligible compile-time and run-time overheads (likely to be optimized away completely by most compilers). </para>
 </note>
-</para></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> <phrase role="keyword">explicit</phrase> <anchor id="idm45123870388960-bb"/><phrase role="identifier">constructor_precondition</phrase><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this object specifying constructor preconditions. <para>
+</para></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> <phrase role="keyword">explicit</phrase> <anchor id="idm45394999532192-bb"/><phrase role="identifier">constructor_precondition</phrase><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this object specifying constructor preconditions. <para>
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
@@ -14584,8 +14824,8 @@ In general, it is not recommended to define this macro because these compile-tim
     <phrase role="identifier">from_failure_handler</phrase> <link linkend="boost.contract.get_old_failure"><phrase role="identifier">get_old_failure</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
     <phrase role="keyword">void</phrase> <link linkend="boost.contract.old_failure"><phrase role="identifier">old_failure</phrase></link><phrase role="special">(</phrase><phrase role="identifier">from</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
     <phrase role="identifier">from_failure_handler</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">&amp;</phrase> 
-    <link linkend="boost.contract.set_entr_idm45123870191120"><phrase role="identifier">set_entry_invariant_failure</phrase></link><phrase role="special">(</phrase><phrase role="identifier">from_failure_handler</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
-    <phrase role="identifier">from_failure_handler</phrase> <link linkend="boost.contract.get_entr_idm45123870181632"><phrase role="identifier">get_entry_invariant_failure</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+    <link linkend="boost.contract.set_entr_idm45394999333872"><phrase role="identifier">set_entry_invariant_failure</phrase></link><phrase role="special">(</phrase><phrase role="identifier">from_failure_handler</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+    <phrase role="identifier">from_failure_handler</phrase> <link linkend="boost.contract.get_entr_idm45394999324384"><phrase role="identifier">get_entry_invariant_failure</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
     <phrase role="keyword">void</phrase> <link linkend="boost.contract.entry_invariant_failure"><phrase role="identifier">entry_invariant_failure</phrase></link><phrase role="special">(</phrase><phrase role="identifier">from</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
     <phrase role="identifier">from_failure_handler</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">&amp;</phrase> 
     <link linkend="boost.contract.set_exit_invariant_failure"><phrase role="identifier">set_exit_invariant_failure</phrase></link><phrase role="special">(</phrase><phrase role="identifier">from_failure_handler</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
@@ -14603,41 +14843,41 @@ In general, it is not recommended to define this macro because these compile-tim
 <phrase role="special">{</phrase>
 <phrase role="keyword">public</phrase><phrase role="special">:</phrase>
   <phrase role="comment">// <link linkend="boost.contract.assertion_failureconstruct-copy-destruct">construct/copy/destruct</link></phrase>
-  <phrase role="keyword">explicit</phrase> <link linkend="idm45123870357456-bb"><phrase role="identifier">assertion_failure</phrase></link><phrase role="special">(</phrase><phrase role="keyword">char</phrase> <phrase role="keyword">const</phrase> <phrase role="special">*</phrase> <phrase role="special">=</phrase> <phrase role="string">""</phrase><phrase role="special">,</phrase> <phrase role="keyword">unsigned</phrase> <phrase role="keyword">long</phrase> <phrase role="special">=</phrase> <phrase role="number">0</phrase><phrase role="special">,</phrase> 
+  <phrase role="keyword">explicit</phrase> <link linkend="idm45394999500624-bb"><phrase role="identifier">assertion_failure</phrase></link><phrase role="special">(</phrase><phrase role="keyword">char</phrase> <phrase role="keyword">const</phrase> <phrase role="special">*</phrase> <phrase role="special">=</phrase> <phrase role="string">""</phrase><phrase role="special">,</phrase> <phrase role="keyword">unsigned</phrase> <phrase role="keyword">long</phrase> <phrase role="special">=</phrase> <phrase role="number">0</phrase><phrase role="special">,</phrase> 
                              <phrase role="keyword">char</phrase> <phrase role="keyword">const</phrase> <phrase role="special">*</phrase> <phrase role="special">=</phrase> <phrase role="string">""</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
-  <phrase role="keyword">explicit</phrase> <link linkend="idm45123870350416-bb"><phrase role="identifier">assertion_failure</phrase></link><phrase role="special">(</phrase><phrase role="keyword">char</phrase> <phrase role="keyword">const</phrase> <phrase role="special">*</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
-  <link linkend="idm45123870347936-bb"><phrase role="special">~</phrase><phrase role="identifier">assertion_failure</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
-
-  <phrase role="comment">// <link linkend="idm45123870372080-bb">public member functions</link></phrase>
-  <phrase role="keyword">virtual</phrase> <phrase role="keyword">char</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">*</phrase> <link linkend="idm45123870371520-bb"><phrase role="identifier">what</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
-  <phrase role="keyword">char</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">*</phrase> <link linkend="idm45123870366448-bb"><phrase role="identifier">file</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
-  <phrase role="keyword">unsigned</phrase> <phrase role="keyword">long</phrase> <link linkend="idm45123870363520-bb"><phrase role="identifier">line</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
-  <phrase role="keyword">char</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">*</phrase> <link linkend="idm45123870360592-bb"><phrase role="identifier">code</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
-<phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This exception is thrown by code expanded by <computeroutput><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput> (but it can also be thrown by user code programmed manually without that macro). This exception is typically used to report contract assertion failures because it contains detailed information about the file name, line number, and source code of the asserted condition (so it can be used by this library to provide detailed error messages). However, any other exception can be used to report a contract assertion failure (including user-defined exceptions).</para><para>This library will call the appropriate contract failure handler function ( <computeroutput><link linkend="boost.contract.precondition_failure">boost::contract::precondition_failure</link></computeroutput>, etc.) when this or any other exception is thrown while checking contracts (by default, these failure handler functions print an error message to <computeroutput>std::cerr</computeroutput> and terminate the program, but they can be customized to take any other action).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__"> Throw on Failure</link>,  <link linkend="boost_contract.extras.no_macros__and_no_variadic_macros_"> No Macros</link> </para>
+  <phrase role="keyword">explicit</phrase> <link linkend="idm45394999493584-bb"><phrase role="identifier">assertion_failure</phrase></link><phrase role="special">(</phrase><phrase role="keyword">char</phrase> <phrase role="keyword">const</phrase> <phrase role="special">*</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+  <link linkend="idm45394999491104-bb"><phrase role="special">~</phrase><phrase role="identifier">assertion_failure</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+
+  <phrase role="comment">// <link linkend="idm45394999515280-bb">public member functions</link></phrase>
+  <phrase role="keyword">virtual</phrase> <phrase role="keyword">char</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">*</phrase> <link linkend="idm45394999514720-bb"><phrase role="identifier">what</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
+  <phrase role="keyword">char</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">*</phrase> <link linkend="idm45394999509616-bb"><phrase role="identifier">file</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
+  <phrase role="keyword">unsigned</phrase> <phrase role="keyword">long</phrase> <link linkend="idm45394999506688-bb"><phrase role="identifier">line</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
+  <phrase role="keyword">char</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">*</phrase> <link linkend="idm45394999503760-bb"><phrase role="identifier">code</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
+<phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This exception is thrown by code expanded by <computeroutput><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput> (but it can also be thrown by user code programmed manually without that macro). This exception is typically used to report contract assertion failures because it contains detailed information about the file name, line number, and source code of the asserted condition (so it can be used by this library to provide detailed error messages when handling contract assertion failures).</para><para>However, any other exception can be used to report a contract assertion failure (including user-defined exceptions). This library will call the appropriate contract failure handler function ( <computeroutput><link linkend="boost.contract.precondition_failure">boost::contract::precondition_failure</link></computeroutput>, etc.) when this or any other exception is thrown while checking contracts (by default, these failure handler functions print an error message to <computeroutput>std::cerr</computeroutput> and terminate the program, but they can be customized to take any other action).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__"> Throw on Failure</link>,  <link linkend="boost_contract.extras.no_macros__and_no_variadic_macros_"> No Macros</link> </para>
 </para>
 </para><refsect2><title><anchor id="boost.contract.assertion_failureconstruct-copy-destruct"/><computeroutput>assertion_failure</computeroutput> 
         public
-       construct/copy/destruct</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">explicit</phrase> <anchor id="idm45123870357456-bb"/><phrase role="identifier">assertion_failure</phrase><phrase role="special">(</phrase><phrase role="keyword">char</phrase> <phrase role="keyword">const</phrase> <phrase role="special">*</phrase> file <phrase role="special">=</phrase> <phrase role="string">""</phrase><phrase role="special">,</phrase> <phrase role="keyword">unsigned</phrase> <phrase role="keyword">long</phrase> line <phrase role="special">=</phrase> <phrase role="number">0</phrase><phrase role="special">,</phrase> 
+       construct/copy/destruct</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">explicit</phrase> <anchor id="idm45394999500624-bb"/><phrase role="identifier">assertion_failure</phrase><phrase role="special">(</phrase><phrase role="keyword">char</phrase> <phrase role="keyword">const</phrase> <phrase role="special">*</phrase> file <phrase role="special">=</phrase> <phrase role="string">""</phrase><phrase role="special">,</phrase> <phrase role="keyword">unsigned</phrase> <phrase role="keyword">long</phrase> line <phrase role="special">=</phrase> <phrase role="number">0</phrase><phrase role="special">,</phrase> 
                            <phrase role="keyword">char</phrase> <phrase role="keyword">const</phrase> <phrase role="special">*</phrase> code <phrase role="special">=</phrase> <phrase role="string">""</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this object with file name, line number, and source code text of an assertion condition (all optional). <para>This constructor can also be used to specify no information (default constructor), or to specify only file name and line number but not source code text (because of the parameter default values).</para><para>
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>code</computeroutput></term><listitem><para>Text listing the source code of the assertion condition. </para></listitem></varlistentry><varlistentry><term><computeroutput>file</computeroutput></term><listitem><para>Name of the file containing the assertion (usually set using <computeroutput>__FILE__</computeroutput>). </para></listitem></varlistentry><varlistentry><term><computeroutput>line</computeroutput></term><listitem><para>Number of the line containing the assertion (usually set using <computeroutput>__LINE__</computeroutput>). </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">explicit</phrase> <anchor id="idm45123870350416-bb"/><phrase role="identifier">assertion_failure</phrase><phrase role="special">(</phrase><phrase role="keyword">char</phrase> <phrase role="keyword">const</phrase> <phrase role="special">*</phrase> code<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this object only with the source code text of the assertion condition. <para>
+                ?><varlistentry><term><computeroutput>code</computeroutput></term><listitem><para>Text listing the source code of the assertion condition. </para></listitem></varlistentry><varlistentry><term><computeroutput>file</computeroutput></term><listitem><para>Name of the file containing the assertion (usually set using <computeroutput>__FILE__</computeroutput>). </para></listitem></varlistentry><varlistentry><term><computeroutput>line</computeroutput></term><listitem><para>Number of the line containing the assertion (usually set using <computeroutput>__LINE__</computeroutput>). </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">explicit</phrase> <anchor id="idm45394999493584-bb"/><phrase role="identifier">assertion_failure</phrase><phrase role="special">(</phrase><phrase role="keyword">char</phrase> <phrase role="keyword">const</phrase> <phrase role="special">*</phrase> code<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this object only with the source code text of the assertion condition. <para>
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>code</computeroutput></term><listitem><para>Text listing the source code of the assertion condition. </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><anchor id="idm45123870347936-bb"/><phrase role="special">~</phrase><phrase role="identifier">assertion_failure</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Destruct this object. <para><emphasis role="bold">Throws:</emphasis> This is declared <computeroutput>noexcept</computeroutput> (or <computeroutput>throw()</computeroutput> before C++11). </para></listitem></orderedlist></refsect2><refsect2><title><anchor id="idm45123870372080-bb"/><computeroutput>assertion_failure</computeroutput> public member functions</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">virtual</phrase> <phrase role="keyword">char</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">*</phrase> <anchor id="idm45123870371520-bb"/><phrase role="identifier">what</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>String describing the failed assertion. <para><emphasis role="bold">Throws:</emphasis> This is declared <computeroutput>noexcept</computeroutput> (or <computeroutput>throw()</computeroutput> before C++11).</para><para>
+                ?><varlistentry><term><computeroutput>code</computeroutput></term><listitem><para>Text listing the source code of the assertion condition. </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><anchor id="idm45394999491104-bb"/><phrase role="special">~</phrase><phrase role="identifier">assertion_failure</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Destruct this object. <para><emphasis role="bold">Throws:</emphasis> This is declared <computeroutput>noexcept</computeroutput> (or <computeroutput>throw()</computeroutput> before C++11). </para></listitem></orderedlist></refsect2><refsect2><title><anchor id="idm45394999515280-bb"/><computeroutput>assertion_failure</computeroutput> public member functions</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">virtual</phrase> <phrase role="keyword">char</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">*</phrase> <anchor id="idm45394999514720-bb"/><phrase role="identifier">what</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>String describing the failed assertion. <para><emphasis role="bold">Throws:</emphasis> This is declared <computeroutput>noexcept</computeroutput> (or <computeroutput>throw()</computeroutput> before C++11).</para><para>
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
-        ?><varlistentry><term>Returns:</term><listitem><para>A string formatted similarly to the following: <computeroutput>assertion "`code()`" failed: file "`file()`", line `line()`</computeroutput>. File, line, and code will be omitted from this string if they were not specified when constructing this object. </para></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">char</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">*</phrase> <anchor id="idm45123870366448-bb"/><phrase role="identifier">file</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Name of the file containing the assertion. <para>
+        ?><varlistentry><term>Returns:</term><listitem><para>A string formatted similarly to the following: <computeroutput>assertion "`code()`" failed: file "`file()`", line `line()`</computeroutput> (where `` indicate execution quotes). File, line, and code will be omitted from this string if they were not specified when constructing this object. </para></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">char</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">*</phrase> <anchor id="idm45394999509616-bb"/><phrase role="identifier">file</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Name of the file containing the assertion. <para>
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
-        ?><varlistentry><term>Returns:</term><listitem><para>File name as specified at construction (or <computeroutput>""</computeroutput> if no file was specified). </para></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">unsigned</phrase> <phrase role="keyword">long</phrase> <anchor id="idm45123870363520-bb"/><phrase role="identifier">line</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Number of the line containing the assertion. <para>
+        ?><varlistentry><term>Returns:</term><listitem><para>File name as specified at construction (or <computeroutput>""</computeroutput> if no file was specified). </para></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">unsigned</phrase> <phrase role="keyword">long</phrase> <anchor id="idm45394999506688-bb"/><phrase role="identifier">line</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Number of the line containing the assertion. <para>
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
-        ?><varlistentry><term>Returns:</term><listitem><para>Line number as specified at construction (or <computeroutput>0</computeroutput> if no line number was specified). </para></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">char</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">*</phrase> <anchor id="idm45123870360592-bb"/><phrase role="identifier">code</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Text listing the source code of the assertion condition. <para>
+        ?><varlistentry><term>Returns:</term><listitem><para>Line number as specified at construction (or <computeroutput>0</computeroutput> if no line number was specified). </para></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">char</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">*</phrase> <anchor id="idm45394999503760-bb"/><phrase role="identifier">code</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Text listing the source code of the assertion condition. <para>
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Returns:</term><listitem><para>Assertion condition source code as specified at construction (or <computeroutput>""</computeroutput> if no source code text was specified). </para></listitem></varlistentry></variablelist></listitem></orderedlist></refsect2></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.bad_virtual_result_cast"><refmeta><refentrytitle>Class bad_virtual_result_cast</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::bad_virtual_result_cast</refname><refpurpose>Exception thrown when inconsistent return values are passed to overridden virtual public functions. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.exception_hpp">boost/contract/core/exception.hpp</link>&gt;
@@ -14648,40 +14888,40 @@ In general, it is not recommended to define this macro because these compile-tim
 <phrase role="special">{</phrase>
 <phrase role="keyword">public</phrase><phrase role="special">:</phrase>
   <phrase role="comment">// <link linkend="boost.contract.bad_virtual_result_castconstruct-copy-destruct">construct/copy/destruct</link></phrase>
-  <phrase role="keyword">explicit</phrase> <link linkend="idm45123870336320-bb"><phrase role="identifier">bad_virtual_result_cast</phrase></link><phrase role="special">(</phrase><phrase role="keyword">char</phrase> <phrase role="keyword">const</phrase> <phrase role="special">*</phrase><phrase role="special">,</phrase> <phrase role="keyword">char</phrase> <phrase role="keyword">const</phrase> <phrase role="special">*</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
-  <link linkend="idm45123870332736-bb"><phrase role="special">~</phrase><phrase role="identifier">bad_virtual_result_cast</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+  <phrase role="keyword">explicit</phrase> <link linkend="idm45394999479088-bb"><phrase role="identifier">bad_virtual_result_cast</phrase></link><phrase role="special">(</phrase><phrase role="keyword">char</phrase> <phrase role="keyword">const</phrase> <phrase role="special">*</phrase><phrase role="special">,</phrase> <phrase role="keyword">char</phrase> <phrase role="keyword">const</phrase> <phrase role="special">*</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+  <link linkend="idm45394999475504-bb"><phrase role="special">~</phrase><phrase role="identifier">bad_virtual_result_cast</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
 
-  <phrase role="comment">// <link linkend="idm45123870340640-bb">public member functions</link></phrase>
-  <phrase role="keyword">virtual</phrase> <phrase role="keyword">char</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">*</phrase> <link linkend="idm45123870340080-bb"><phrase role="identifier">what</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
-<phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This exception is internally thrown by this library when programmers specify return values for public function overrides in derived classes that are not consistent with the return types of the virtual public functions being overridden in the base classes. This allows this library to give more descriptive error messages in such cases.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.public_function_overrides__subcontracting_">
+  <phrase role="comment">// <link linkend="idm45394999483408-bb">public member functions</link></phrase>
+  <phrase role="keyword">virtual</phrase> <phrase role="keyword">char</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">*</phrase> <link linkend="idm45394999482848-bb"><phrase role="identifier">what</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
+<phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This exception is thrown when programmers pass to this library return value parameters for public function overrides in derived classes that are not consistent with the return type parameter passed for the virtual public function being overridden from the base classes. This allows this library to give more descriptive error messages in such cases of misuse.</para><para>This exception is internally thrown by this library and programmers should not need to throw it from user code.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.public_function_overrides__subcontracting_">
         Public Function Overrides</link> </para>
 </para>
 </para><refsect2><title><anchor id="boost.contract.bad_virtual_result_castconstruct-copy-destruct"/><computeroutput>bad_virtual_result_cast</computeroutput> 
         public
-       construct/copy/destruct</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">explicit</phrase> <anchor id="idm45123870336320-bb"/><phrase role="identifier">bad_virtual_result_cast</phrase><phrase role="special">(</phrase><phrase role="keyword">char</phrase> <phrase role="keyword">const</phrase> <phrase role="special">*</phrase> from_type_name<phrase role="special">,</phrase> 
+       construct/copy/destruct</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">explicit</phrase> <anchor id="idm45394999479088-bb"/><phrase role="identifier">bad_virtual_result_cast</phrase><phrase role="special">(</phrase><phrase role="keyword">char</phrase> <phrase role="keyword">const</phrase> <phrase role="special">*</phrase> from_type_name<phrase role="special">,</phrase> 
                                  <phrase role="keyword">char</phrase> <phrase role="keyword">const</phrase> <phrase role="special">*</phrase> to_type_name<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this object with the name of the from- and to- result types. <para>
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>from_type_name</computeroutput></term><listitem><para>Name of the from-type (source of the cast). </para></listitem></varlistentry><varlistentry><term><computeroutput>to_type_name</computeroutput></term><listitem><para>Name of the to-type (destination of the cast). </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><anchor id="idm45123870332736-bb"/><phrase role="special">~</phrase><phrase role="identifier">bad_virtual_result_cast</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Destruct this object. <para><emphasis role="bold">Throws:</emphasis> This is declared <computeroutput>noexcept</computeroutput> (or <computeroutput>throw()</computeroutput> before C++11). </para></listitem></orderedlist></refsect2><refsect2><title><anchor id="idm45123870340640-bb"/><computeroutput>bad_virtual_result_cast</computeroutput> public member functions</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">virtual</phrase> <phrase role="keyword">char</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">*</phrase> <anchor id="idm45123870340080-bb"/><phrase role="identifier">what</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Description for this error (containing both from- and to- type names). <para><emphasis role="bold">Throws:</emphasis> This is declared <computeroutput>noexcept</computeroutput> (or <computeroutput>throw()</computeroutput> before C++11). </para></listitem></orderedlist></refsect2></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.exception"><refmeta><refentrytitle>Class exception</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::exception</refname><refpurpose>Public base class for all exceptions directly thrown by this library. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.exception_hpp">boost/contract/core/exception.hpp</link>&gt;
+                ?><varlistentry><term><computeroutput>from_type_name</computeroutput></term><listitem><para>Name of the from-type (source of the cast). </para></listitem></varlistentry><varlistentry><term><computeroutput>to_type_name</computeroutput></term><listitem><para>Name of the to-type (destination of the cast). </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><anchor id="idm45394999475504-bb"/><phrase role="special">~</phrase><phrase role="identifier">bad_virtual_result_cast</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Destruct this object. <para><emphasis role="bold">Throws:</emphasis> This is declared <computeroutput>noexcept</computeroutput> (or <computeroutput>throw()</computeroutput> before C++11). </para></listitem></orderedlist></refsect2><refsect2><title><anchor id="idm45394999483408-bb"/><computeroutput>bad_virtual_result_cast</computeroutput> public member functions</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">virtual</phrase> <phrase role="keyword">char</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">*</phrase> <anchor id="idm45394999482848-bb"/><phrase role="identifier">what</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Description for this error (containing both from- and to- type names). <para><emphasis role="bold">Throws:</emphasis> This is declared <computeroutput>noexcept</computeroutput> (or <computeroutput>throw()</computeroutput> before C++11). </para></listitem></orderedlist></refsect2></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.exception"><refmeta><refentrytitle>Class exception</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::exception</refname><refpurpose>Public base class for all exceptions directly thrown by this library. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.exception_hpp">boost/contract/core/exception.hpp</link>&gt;
 
 </phrase>
 <phrase role="keyword">class</phrase> <link linkend="boost.contract.exception">exception</link> <phrase role="special">{</phrase>
 <phrase role="keyword">public</phrase><phrase role="special">:</phrase>
   <phrase role="comment">// <link linkend="boost.contract.exceptionconstruct-copy-destruct">construct/copy/destruct</link></phrase>
-  <link linkend="idm45123870323776-bb"><phrase role="special">~</phrase><phrase role="identifier">exception</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+  <link linkend="idm45394999466544-bb"><phrase role="special">~</phrase><phrase role="identifier">exception</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
 <phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This class does not inherit from <computeroutput>std::exception</computeroutput> because exceptions deriving from this class will do that (inheriting from <computeroutput>std::exception</computeroutput>, <computeroutput>std::bad_cast</computeroutput>, etc.).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <computeroutput><link linkend="boost.contract.assertion_failure">boost::contract::assertion_failure</link></computeroutput>,  <computeroutput><link linkend="boost.contract.bad_virtual_result_cast">boost::contract::bad_virtual_result_cast</link></computeroutput>, etc. </para>
 </para>
 </para><refsect2><title><anchor id="boost.contract.exceptionconstruct-copy-destruct"/><computeroutput>exception</computeroutput> 
         public
-       construct/copy/destruct</title><orderedlist><listitem><para><literallayout class="monospaced"><anchor id="idm45123870323776-bb"/><phrase role="special">~</phrase><phrase role="identifier">exception</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Destruct this object. <para><emphasis role="bold">Throws:</emphasis> This is declared <computeroutput>noexcept</computeroutput> (or <computeroutput>throw()</computeroutput> before C++11). </para></listitem></orderedlist></refsect2></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.from"><refmeta><refentrytitle>Type from</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::from</refname><refpurpose>Indicate the kind of operation where the contract assertion failed. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.exception_hpp">boost/contract/core/exception.hpp</link>&gt;
+       construct/copy/destruct</title><orderedlist><listitem><para><literallayout class="monospaced"><anchor id="idm45394999466544-bb"/><phrase role="special">~</phrase><phrase role="identifier">exception</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Destruct this object. <para><emphasis role="bold">Throws:</emphasis> This is declared <computeroutput>noexcept</computeroutput> (or <computeroutput>throw()</computeroutput> before C++11). </para></listitem></orderedlist></refsect2></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.from"><refmeta><refentrytitle>Type from</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::from</refname><refpurpose>Indicate the kind of operation where the contract assertion failed. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.exception_hpp">boost/contract/core/exception.hpp</link>&gt;
 
 </phrase>
 
 <phrase role="keyword">enum</phrase> <phrase role="identifier">from</phrase> <phrase role="special">{</phrase> <link linkend="boost.contract.from.from_constructor">from_constructor</link>, <link linkend="boost.contract.from.from_destructor">from_destructor</link>, <link linkend="boost.contract.from.from_function">from_function</link> <phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is passed as a parameter to the assertion failure handler functions. For example, it might be necessary to know in which operation an assertion failed to make sure exceptions are never thrown from destructors, not even when contract failure handlers are programmed by users to throw exceptions instead of terminating the program.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__"> Throw on Failure</link> </para>
 </para>
-</para><variablelist spacing="compact"><varlistentry><term><computeroutput>from_constructor</computeroutput><anchor id="boost.contract.from.from_constructor"/></term><listitem>Assertion failed when checking contracts for constructors. </listitem></varlistentry><varlistentry><term><computeroutput>from_destructor</computeroutput><anchor id="boost.contract.from.from_destructor"/></term><listitem>Assertion failed when checking contracts for destructors . </listitem></varlistentry><varlistentry><term><computeroutput>from_function</computeroutput><anchor id="boost.contract.from.from_function"/></term><listitem>Assertion failed when checking contracts for functions (members or not). </listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.from_failure_handler"><refmeta><refentrytitle>Type definition from_failure_handler</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>from_failure_handler</refname><refpurpose>Type of assertion failure handler functions (with <computeroutput>from</computeroutput> parameter). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.exception_hpp">boost/contract/core/exception.hpp</link>&gt;
+</para><variablelist spacing="compact"><varlistentry><term><computeroutput>from_constructor</computeroutput><anchor id="boost.contract.from.from_constructor"/></term><listitem>Assertion failed when checking contracts for constructors. </listitem></varlistentry><varlistentry><term><computeroutput>from_destructor</computeroutput><anchor id="boost.contract.from.from_destructor"/></term><listitem>Assertion failed when checking contracts for destructors . </listitem></varlistentry><varlistentry><term><computeroutput>from_function</computeroutput><anchor id="boost.contract.from.from_function"/></term><listitem>Assertion failed when checking contracts for functions (members or not, public or not). </listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.from_failure_handler"><refmeta><refentrytitle>Type definition from_failure_handler</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>from_failure_handler</refname><refpurpose>Type of assertion failure handler functions (with <computeroutput>from</computeroutput> parameter). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.exception_hpp">boost/contract/core/exception.hpp</link>&gt;
 
 </phrase>
 <phrase role="keyword">typedef</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">function</phrase><phrase role="special">&lt;</phrase> <phrase role="keyword">void</phrase><phrase role="special">(</phrase><phrase role="identifier">from</phrase><phrase role="special">)</phrase><phrase role="special">&gt;</phrase> <phrase role="identifier">from_failure_handler</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>Assertion failure handler functions specified by this type must be functors returning <computeroutput>void</computeroutput> and taking a single parameter of type  <computeroutput><link linkend="boost.contract.from">boost::contract::from</link></computeroutput>. For example, this is used to specify contract failure handlers for class invariants, preconditions, postconditions, and exception guarantees.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__"> Throw on Failure</link> </para>
@@ -14757,7 +14997,7 @@ In general, it is not recommended to define this macro because these compile-tim
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>New failure handler functor to set.</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>Same failure handler functor <computeroutput>f</computeroutput> passed as parameter (e.g., fr concatenating function calls).</para></listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.get_postcondition_failure"><refmeta><refentrytitle>Function get_postcondition_failure</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::get_postcondition_failure</refname><refpurpose>Return failure handler currently set for postconditions. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.exception_hpp">boost/contract/core/exception.hpp</link>&gt;
+                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>New failure handler functor to set.</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>Same failure handler functor <computeroutput>f</computeroutput> passed as parameter (e.g., for concatenating function calls).</para></listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.get_postcondition_failure"><refmeta><refentrytitle>Function get_postcondition_failure</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::get_postcondition_failure</refname><refpurpose>Return failure handler currently set for postconditions. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.exception_hpp">boost/contract/core/exception.hpp</link>&gt;
 
 </phrase>
 <phrase role="identifier">from_failure_handler</phrase> <phrase role="identifier">get_postcondition_failure</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is often called only internally by this library.</para><para><emphasis role="bold">Throws:</emphasis> This is declared <computeroutput>noexcept</computeroutput> (or <computeroutput>throw()</computeroutput> before C++11).</para><para>
@@ -14807,36 +15047,36 @@ In general, it is not recommended to define this macro because these compile-tim
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>where</computeroutput></term><listitem><para>Operation that failed the contract assertion.</para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.set_old_failure"><refmeta><refentrytitle>Function set_old_failure</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::set_old_failure</refname><refpurpose>Set failure handler for old value copies at body. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.exception_hpp">boost/contract/core/exception.hpp</link>&gt;
+                ?><varlistentry><term><computeroutput>where</computeroutput></term><listitem><para>Operation that failed the contract assertion.</para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.set_old_failure"><refmeta><refentrytitle>Function set_old_failure</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::set_old_failure</refname><refpurpose>Set failure handler for old values copied at body. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.exception_hpp">boost/contract/core/exception.hpp</link>&gt;
 
 </phrase>
 <phrase role="identifier">from_failure_handler</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">&amp;</phrase> <phrase role="identifier">set_old_failure</phrase><phrase role="special">(</phrase><phrase role="identifier">from_failure_handler</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>Set a new failure handler and returns it.</para><para><emphasis role="bold">Throws:</emphasis> This is declared <computeroutput>noexcept</computeroutput> (or <computeroutput>throw()</computeroutput> before C++11).</para><para>
 
-<para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__"> Throw on Failure</link>,  <link linkend="boost_contract.advanced.old_value_copies_at_body"> Old Value Copies at Body</link> </para>
+<para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__"> Throw on Failure</link>,  <link linkend="boost_contract.advanced.old_values_copied_at_body"> Old Values Copied at Body</link> </para>
 </para>
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>New failure handler functor to set.</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>Same failure handler functor <computeroutput>f</computeroutput> passed as parameter (e.g., for concatenating function calls).</para></listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.get_old_failure"><refmeta><refentrytitle>Function get_old_failure</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::get_old_failure</refname><refpurpose>Return failure handler currently set for old value copies at body. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.exception_hpp">boost/contract/core/exception.hpp</link>&gt;
+                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>New failure handler functor to set.</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>Same failure handler functor <computeroutput>f</computeroutput> passed as parameter (e.g., for concatenating function calls).</para></listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.get_old_failure"><refmeta><refentrytitle>Function get_old_failure</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::get_old_failure</refname><refpurpose>Return failure handler currently set for old values copied at body. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.exception_hpp">boost/contract/core/exception.hpp</link>&gt;
 
 </phrase>
 <phrase role="identifier">from_failure_handler</phrase> <phrase role="identifier">get_old_failure</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is often called only internally by this library.</para><para><emphasis role="bold">Throws:</emphasis> This is declared <computeroutput>noexcept</computeroutput> (or <computeroutput>throw()</computeroutput> before C++11).</para><para>
-<para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__"> Throw on Failure</link>,  <link linkend="boost_contract.advanced.old_value_copies_at_body"> Old Value Copies at Body</link> </para>
+<para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__"> Throw on Failure</link>,  <link linkend="boost_contract.advanced.old_values_copied_at_body"> Old Values Copied at Body</link> </para>
 </para>
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
-        ?><varlistentry><term>Returns:</term><listitem><para>A copy of the failure handler currently set.</para></listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.old_failure"><refmeta><refentrytitle>Function old_failure</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::old_failure</refname><refpurpose>Call failure handler for old value copies at body. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.exception_hpp">boost/contract/core/exception.hpp</link>&gt;
+        ?><varlistentry><term>Returns:</term><listitem><para>A copy of the failure handler currently set.</para></listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.old_failure"><refmeta><refentrytitle>Function old_failure</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::old_failure</refname><refpurpose>Call failure handler for old values copied at body. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.exception_hpp">boost/contract/core/exception.hpp</link>&gt;
 
 </phrase>
 <phrase role="keyword">void</phrase> <phrase role="identifier">old_failure</phrase><phrase role="special">(</phrase><phrase role="identifier">from</phrase> where<phrase role="special">)</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is often called only internally by this library.</para><para><emphasis role="bold">Throws:</emphasis> This can throw in case programmers specify a failure handler that throws exceptions on contract assertion failures (not the default).</para><para>
-<para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__"> Throw on Failure</link>,  <link linkend="boost_contract.advanced.old_value_copies_at_body"> Old Value Copies at Body</link> </para>
+<para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__"> Throw on Failure</link>,  <link linkend="boost_contract.advanced.old_values_copied_at_body"> Old Values Copied at Body</link> </para>
 </para>
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>where</computeroutput></term><listitem><para>Operation that failed the old value copy (e.g., this might be useful to program failure handler functors that never throw from destructors, not even when they are programmed by users to throw exceptions instead of terminating the program).</para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.set_entr_idm45123870191120"><refmeta><refentrytitle>Function set_entry_invariant_failure</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::set_entry_invariant_failure</refname><refpurpose>Set failure handler for class invariants at entry. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.exception_hpp">boost/contract/core/exception.hpp</link>&gt;
+                ?><varlistentry><term><computeroutput>where</computeroutput></term><listitem><para>Operation that failed the old value copy (e.g., this might be useful to program failure handler functors that never throw from destructors, not even when they are programmed by users to throw exceptions instead of terminating the program).</para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.set_entr_idm45394999333872"><refmeta><refentrytitle>Function set_entry_invariant_failure</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::set_entry_invariant_failure</refname><refpurpose>Set failure handler for class invariants at entry. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.exception_hpp">boost/contract/core/exception.hpp</link>&gt;
 
 </phrase>
 <phrase role="identifier">from_failure_handler</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">&amp;</phrase> 
@@ -14849,7 +15089,7 @@ In general, it is not recommended to define this macro because these compile-tim
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>New failure handler functor to set.</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>Same failure handler functor <computeroutput>f</computeroutput> passed as parameter (e.g., for concatenating function calls).</para></listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.get_entr_idm45123870181632"><refmeta><refentrytitle>Function get_entry_invariant_failure</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::get_entry_invariant_failure</refname><refpurpose>Return failure handler currently set for class invariants at entry. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.exception_hpp">boost/contract/core/exception.hpp</link>&gt;
+                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>New failure handler functor to set.</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>Same failure handler functor <computeroutput>f</computeroutput> passed as parameter (e.g., for concatenating function calls).</para></listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.get_entr_idm45394999324384"><refmeta><refentrytitle>Function get_entry_invariant_failure</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::get_entry_invariant_failure</refname><refpurpose>Return failure handler currently set for class invariants at entry. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.exception_hpp">boost/contract/core/exception.hpp</link>&gt;
 
 </phrase>
 <phrase role="identifier">from_failure_handler</phrase> <phrase role="identifier">get_entry_invariant_failure</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is often called only internally by this library.</para><para><emphasis role="bold">Throws:</emphasis> This is declared <computeroutput>noexcept</computeroutput> (or <computeroutput>throw()</computeroutput> before C++11).</para><para>
@@ -14906,7 +15146,7 @@ In general, it is not recommended to define this macro because these compile-tim
 
 </phrase>
 <phrase role="identifier">from_failure_handler</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">&amp;</phrase> 
-<phrase role="identifier">set_invariant_failure</phrase><phrase role="special">(</phrase><phrase role="identifier">from_failure_handler</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is provided for convenience and it is equivalent to call both  <computeroutput><computeroutput><link linkend="boost.contract.set_entr_idm45123870191120">boost::contract::set_entry_invariant_failure</link></computeroutput></computeroutput> and  <computeroutput><computeroutput><link linkend="boost.contract.set_exit_invariant_failure">boost::contract::set_exit_invariant_failure</link></computeroutput></computeroutput> with the same functor parameter <computeroutput>f</computeroutput>.</para><para><emphasis role="bold">Throws:</emphasis> This is declared <computeroutput>noexcept</computeroutput> (or <computeroutput>throw()</computeroutput> before C++11).</para><para>
+<phrase role="identifier">set_invariant_failure</phrase><phrase role="special">(</phrase><phrase role="identifier">from_failure_handler</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is provided for convenience and it is equivalent to call both  <computeroutput><computeroutput><link linkend="boost.contract.set_entr_idm45394999333872">boost::contract::set_entry_invariant_failure</link></computeroutput></computeroutput> and  <computeroutput><computeroutput><link linkend="boost.contract.set_exit_invariant_failure">boost::contract::set_exit_invariant_failure</link></computeroutput></computeroutput> with the same functor parameter <computeroutput>f</computeroutput>.</para><para><emphasis role="bold">Throws:</emphasis> This is declared <computeroutput>noexcept</computeroutput> (or <computeroutput>throw()</computeroutput> before C++11).</para><para>
 
 <para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__"> Throw on Failure</link>,  <link linkend="boost_contract.tutorial.class_invariants"> Class Invariants</link>,  <link linkend="boost_contract.extras.volatile_public_functions">
         Volatile Public Functions</link> </para>
@@ -14917,15 +15157,15 @@ In general, it is not recommended to define this macro because these compile-tim
                   list-presentation="table"
                 ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>New failure handler functor to set for both entry and exit invariants.</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>Same failure handler functor <computeroutput>f</computeroutput> passed as parameter (e.g., for concatenating function calls).</para></listitem></varlistentry></variablelist></refsect1></refentry>
 </section>
-<section id="header.boost.contract.core.specify_hpp"><title>Header &lt;<ulink url="../../../../boost/contract/core/specify.hpp">boost/contract/core/specify.hpp</ulink>&gt;</title><para>Specify preconditions, old value copies at body, postconditions, and exception guarantees. </para><para>Preconditions, old value copies at body, postconditions, and exception guarantees are all optionals but, when they are specified, they need to be specified in that order. </para><synopsis xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">namespace</phrase> <phrase role="identifier">boost</phrase> <phrase role="special">{</phrase>
+<section id="header.boost.contract.core.specify_hpp"><title>Header &lt;<ulink url="../../../../boost/contract/core/specify.hpp">boost/contract/core/specify.hpp</ulink>&gt;</title><para>Specify preconditions, old values copied at body, postconditions, and exception guarantees. </para><para>Preconditions, old values copied at body, postconditions, and exception guarantees are all optionals but, when they are specified, they need to be specified in that order. </para><synopsis xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">namespace</phrase> <phrase role="identifier">boost</phrase> <phrase role="special">{</phrase>
   <phrase role="keyword">namespace</phrase> <phrase role="identifier">contract</phrase> <phrase role="special">{</phrase>
     <phrase role="keyword">class</phrase> <link linkend="boost.contract.specify_except">specify_except</link><phrase role="special">;</phrase>
     <phrase role="keyword">class</phrase> <link linkend="boost.contract.specify_nothing">specify_nothing</link><phrase role="special">;</phrase>
     <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> VirtualResult <phrase role="special">=</phrase> <phrase role="keyword">void</phrase><phrase role="special">&gt;</phrase> 
-      <phrase role="keyword">class</phrase> <link linkend="boost.contract.specify__idm45123870103104">specify_old_postcondition_except</link><phrase role="special">;</phrase>
-    <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> VirtualResult <phrase role="special">=</phrase> <phrase role="keyword">void</phrase><phrase role="special">&gt;</phrase> <phrase role="keyword">class</phrase> <link linkend="boost.contract.specify__idm45123870066880">specify_postcondition_except</link><phrase role="special">;</phrase>
+      <phrase role="keyword">class</phrase> <link linkend="boost.contract.specify__idm45394999245856">specify_old_postcondition_except</link><phrase role="special">;</phrase>
+    <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> VirtualResult <phrase role="special">=</phrase> <phrase role="keyword">void</phrase><phrase role="special">&gt;</phrase> <phrase role="keyword">class</phrase> <link linkend="boost.contract.specify__idm45394999207792">specify_postcondition_except</link><phrase role="special">;</phrase>
     <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> VirtualResult <phrase role="special">=</phrase> <phrase role="keyword">void</phrase><phrase role="special">&gt;</phrase> 
-      <phrase role="keyword">class</phrase> <link linkend="boost.contract.specify__idm45123870039968">specify_precondition_old_postcondition_except</link><phrase role="special">;</phrase>
+      <phrase role="keyword">class</phrase> <link linkend="boost.contract.specify__idm45394999179040">specify_precondition_old_postcondition_except</link><phrase role="special">;</phrase>
   <phrase role="special">}</phrase>
 <phrase role="special">}</phrase></synopsis>
 <refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.specify_except"><refmeta><refentrytitle>Class specify_except</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::specify_except</refname><refpurpose>Allow to specify exception guarantees. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.specify_hpp">boost/contract/core/specify.hpp</link>&gt;
@@ -14934,16 +15174,16 @@ In general, it is not recommended to define this macro because these compile-tim
 <phrase role="keyword">class</phrase> <link linkend="boost.contract.specify_except">specify_except</link> <phrase role="special">{</phrase>
 <phrase role="keyword">public</phrase><phrase role="special">:</phrase>
   <phrase role="comment">// <link linkend="boost.contract.specify_exceptconstruct-copy-destruct">construct/copy/destruct</link></phrase>
-  <link linkend="idm45123870114064-bb"><phrase role="special">~</phrase><phrase role="identifier">specify_except</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+  <link linkend="idm45394999256816-bb"><phrase role="special">~</phrase><phrase role="identifier">specify_except</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
 
-  <phrase role="comment">// <link linkend="idm45123870121632-bb">public member functions</link></phrase>
-  <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> <link linkend="boost.contract.specify_nothing">specify_nothing</link> <link linkend="idm45123870121072-bb"><phrase role="identifier">except</phrase></link><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
-<phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>Allow to specify the functor this library will call to check exception guarantees. This object is internally constructed by this library when users specify contracts calling <computeroutput><link linkend="boost.contract.function">boost::contract::function</link></computeroutput> and similar functions (that is why this class does not have a public constructor).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.exception_guarantees"> Exception Guarantees</link> </para>
+  <phrase role="comment">// <link linkend="idm45394999264384-bb">public member functions</link></phrase>
+  <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> <link linkend="boost.contract.specify_nothing">specify_nothing</link> <link linkend="idm45394999263824-bb"><phrase role="identifier">except</phrase></link><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+<phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>Allow to specify the functor this library will call to check exception guarantees. This object is internally constructed by the library when users specify contracts calling <computeroutput><link linkend="boost.contract.function">boost::contract::function</link></computeroutput> and similar functions (that is why this class does not have a public constructor).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.exception_guarantees"> Exception Guarantees</link> </para>
 </para>
 </para><refsect2><title><anchor id="boost.contract.specify_exceptconstruct-copy-destruct"/><computeroutput>specify_except</computeroutput> 
         public
-       construct/copy/destruct</title><orderedlist><listitem><para><literallayout class="monospaced"><anchor id="idm45123870114064-bb"/><phrase role="special">~</phrase><phrase role="identifier">specify_except</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Destruct this object. <para><emphasis role="bold">Throws:</emphasis> This can throw in case programmers specify failure handlers that throw exceptions instead of terminating the program (see  <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__">
-            Throw on Failure</link>). (This is declared <computeroutput>noexcept(false)</computeroutput> since C++11.) </para></listitem></orderedlist></refsect2><refsect2><title><anchor id="idm45123870121632-bb"/><computeroutput>specify_except</computeroutput> public member functions</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> <link linkend="boost.contract.specify_nothing">specify_nothing</link> <anchor id="idm45123870121072-bb"/><phrase role="identifier">except</phrase><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Allow to specify exception guarantees. <para>
+       construct/copy/destruct</title><orderedlist><listitem><para><literallayout class="monospaced"><anchor id="idm45394999256816-bb"/><phrase role="special">~</phrase><phrase role="identifier">specify_except</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Destruct this object. <para><emphasis role="bold">Throws:</emphasis> This is declared <computeroutput>noexcept(false)</computeroutput> since C++11 to allow users to program failure handlers that throw exceptions on contract assertion failures (not the default, see  <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__">
+            Throw on Failure</link>). </para></listitem></orderedlist></refsect2><refsect2><title><anchor id="idm45394999264384-bb"/><computeroutput>specify_except</computeroutput> public member functions</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> <link linkend="boost.contract.specify_nothing">specify_nothing</link> <anchor id="idm45394999263824-bb"/><phrase role="identifier">except</phrase><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Allow to specify exception guarantees. <para>
 
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
@@ -14955,121 +15195,121 @@ In general, it is not recommended to define this macro because these compile-tim
 <phrase role="keyword">class</phrase> <link linkend="boost.contract.specify_nothing">specify_nothing</link> <phrase role="special">{</phrase>
 <phrase role="keyword">public</phrase><phrase role="special">:</phrase>
   <phrase role="comment">// <link linkend="boost.contract.specify_nothingconstruct-copy-destruct">construct/copy/destruct</link></phrase>
-  <link linkend="idm45123870106000-bb"><phrase role="special">~</phrase><phrase role="identifier">specify_nothing</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
-<phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This class has no member function so it is used to prevent specifying additional functors to check any other contract. This object is internally constructed by this library when users specify contracts calling <computeroutput><link linkend="boost.contract.function">boost::contract::function</link></computeroutput> and similar functions (that is why this class does not have a public constructor).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial"> Tutorial</link> </para>
+  <link linkend="idm45394999248752-bb"><phrase role="special">~</phrase><phrase role="identifier">specify_nothing</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+<phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This class has no member function so it is used to prevent specifying additional functors to check any other contract. This object is internally constructed by the library when users specify contracts calling <computeroutput><link linkend="boost.contract.function">boost::contract::function</link></computeroutput> and similar functions (that is why this class does not have a public constructor).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial"> Tutorial</link> </para>
 </para>
 </para><refsect2><title><anchor id="boost.contract.specify_nothingconstruct-copy-destruct"/><computeroutput>specify_nothing</computeroutput> 
         public
-       construct/copy/destruct</title><orderedlist><listitem><para><literallayout class="monospaced"><anchor id="idm45123870106000-bb"/><phrase role="special">~</phrase><phrase role="identifier">specify_nothing</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Destruct this object. <para><emphasis role="bold">Throws:</emphasis> This can throw in case programmers specify failure handlers that throw exceptions instead of terminating the program (see  <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__">
-            Throw on Failure</link>). (This is declared <computeroutput>noexcept(false)</computeroutput> since C++11.) </para></listitem></orderedlist></refsect2></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.specify__idm45123870103104"><refmeta><refentrytitle>Class template specify_old_postcondition_except</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::specify_old_postcondition_except</refname><refpurpose>Allow to specify old value copies at body, postconditions, and exception guarantees. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.specify_hpp">boost/contract/core/specify.hpp</link>&gt;
+       construct/copy/destruct</title><orderedlist><listitem><para><literallayout class="monospaced"><anchor id="idm45394999248752-bb"/><phrase role="special">~</phrase><phrase role="identifier">specify_nothing</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Destruct this object. <para><emphasis role="bold">Throws:</emphasis> This is declared <computeroutput>noexcept(false)</computeroutput> since C++11 to allow users to program failure handlers that throw exceptions on contract assertion failures (not the default, see  <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__">
+            Throw on Failure</link>). </para></listitem></orderedlist></refsect2></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.specify__idm45394999245856"><refmeta><refentrytitle>Class template specify_old_postcondition_except</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::specify_old_postcondition_except</refname><refpurpose>Allow to specify old values copied at body, postconditions, and exception guarantees. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.specify_hpp">boost/contract/core/specify.hpp</link>&gt;
 
 </phrase><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> VirtualResult <phrase role="special">=</phrase> <phrase role="keyword">void</phrase><phrase role="special">&gt;</phrase> 
-<phrase role="keyword">class</phrase> <link linkend="boost.contract.specify__idm45123870103104">specify_old_postcondition_except</link> <phrase role="special">{</phrase>
+<phrase role="keyword">class</phrase> <link linkend="boost.contract.specify__idm45394999245856">specify_old_postcondition_except</link> <phrase role="special">{</phrase>
 <phrase role="keyword">public</phrase><phrase role="special">:</phrase>
-  <phrase role="comment">// <link linkend="boost.contract.specify__idm45123870103104construct-copy-destruct">construct/copy/destruct</link></phrase>
-  <link linkend="idm45123870069776-bb"><phrase role="special">~</phrase><phrase role="identifier">specify_old_postcondition_except</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+  <phrase role="comment">// <link linkend="boost.contract.specify__idm45394999245856construct-copy-destruct">construct/copy/destruct</link></phrase>
+  <link linkend="idm45394999210688-bb"><phrase role="special">~</phrase><phrase role="identifier">specify_old_postcondition_except</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
 
-  <phrase role="comment">// <link linkend="idm45123870095088-bb">public member functions</link></phrase>
+  <phrase role="comment">// <link linkend="idm45394999237760-bb">public member functions</link></phrase>
   <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> 
-    <link linkend="boost.contract.specify__idm45123870066880">specify_postcondition_except</link><phrase role="special">&lt;</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&gt;</phrase> <link linkend="idm45123870094528-bb"><phrase role="identifier">old</phrase></link><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
-  <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> <link linkend="boost.contract.specify_except">specify_except</link> <link linkend="idm45123870086032-bb"><phrase role="identifier">postcondition</phrase></link><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
-  <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> <link linkend="boost.contract.specify_nothing">specify_nothing</link> <link linkend="idm45123870076784-bb"><phrase role="identifier">except</phrase></link><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
-<phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>Allow to specify functors this library will call to copy old value at body, check postconditions, and check exception guarantees. This object is internally constructed by this library when users specify contracts calling <computeroutput><link linkend="boost.contract.function">boost::contract::function</link></computeroutput> and similar functions (that is why this class does not have a public constructor).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.advanced.old_value_copies_at_body"> Old Value Copies at Body</link>,  <link linkend="boost_contract.tutorial.postconditions"> Postconditions</link>,  <link linkend="boost_contract.tutorial.exception_guarantees"> Exception Guarantees</link></para>
+    <link linkend="boost.contract.specify__idm45394999207792">specify_postcondition_except</link><phrase role="special">&lt;</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&gt;</phrase> <link linkend="idm45394999237200-bb"><phrase role="identifier">old</phrase></link><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+  <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> <link linkend="boost.contract.specify_except">specify_except</link> <link linkend="idm45394999228704-bb"><phrase role="identifier">postcondition</phrase></link><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+  <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> <link linkend="boost.contract.specify_nothing">specify_nothing</link> <link linkend="idm45394999217696-bb"><phrase role="identifier">except</phrase></link><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+<phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>Allow to specify functors this library will call to copy old values at body, check postconditions, and check exception guarantees. This object is internally constructed by the library when users specify contracts calling <computeroutput><link linkend="boost.contract.function">boost::contract::function</link></computeroutput> and similar functions (that is why this class does not have a public constructor).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.advanced.old_values_copied_at_body"> Old Values Copied at Body</link>,  <link linkend="boost_contract.tutorial.postconditions"> Postconditions</link>,  <link linkend="boost_contract.tutorial.exception_guarantees"> Exception Guarantees</link></para>
 </para>
 
-</para><refsect2><title>Template Parameters</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">typename</phrase> VirtualResult <phrase role="special">=</phrase> <phrase role="keyword">void</phrase></literallayout></para><para><para>Return type of the enclosing function declaring the contract if that function is either a virtual public function or a public function override. Otherwise, this type is always <computeroutput>void</computeroutput>. </para></para></listitem></orderedlist></refsect2><refsect2><title><anchor id="boost.contract.specify__idm45123870103104construct-copy-destruct"/><computeroutput>specify_old_postcondition_except</computeroutput> 
+</para><refsect2><title>Template Parameters</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">typename</phrase> VirtualResult <phrase role="special">=</phrase> <phrase role="keyword">void</phrase></literallayout></para><para><para>Return type of the enclosing function declaring the contract if that is either a virtual or an overriding public function, otherwise this is always <computeroutput>void</computeroutput>. (Usually this template parameter is automatically deduced by C++ and it does not need to be explicitly specified by programmers.) </para></para></listitem></orderedlist></refsect2><refsect2><title><anchor id="boost.contract.specify__idm45394999245856construct-copy-destruct"/><computeroutput>specify_old_postcondition_except</computeroutput> 
         public
-       construct/copy/destruct</title><orderedlist><listitem><para><literallayout class="monospaced"><anchor id="idm45123870069776-bb"/><phrase role="special">~</phrase><phrase role="identifier">specify_old_postcondition_except</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Destruct this object. <para><emphasis role="bold">Throws:</emphasis> This can throw in case programmers specify failure handlers that throw exceptions instead of terminating the program (see  <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__">
-            Throw on Failure</link>). (This is declared <computeroutput>noexcept(false)</computeroutput> since C++11.) </para></listitem></orderedlist></refsect2><refsect2><title><anchor id="idm45123870095088-bb"/><computeroutput>specify_old_postcondition_except</computeroutput> public member functions</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> 
-  <link linkend="boost.contract.specify__idm45123870066880">specify_postcondition_except</link><phrase role="special">&lt;</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&gt;</phrase> <anchor id="idm45123870094528-bb"/><phrase role="identifier">old</phrase><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Allow to specify old value copies at body. <para>It should often be sufficient to initialize old value pointers as soon as they are declared, without using this function (see  <link linkend="boost_contract.advanced.old_value_copies_at_body"> Old Value Copies at Body</link>).</para><para>
+       construct/copy/destruct</title><orderedlist><listitem><para><literallayout class="monospaced"><anchor id="idm45394999210688-bb"/><phrase role="special">~</phrase><phrase role="identifier">specify_old_postcondition_except</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Destruct this object. <para><emphasis role="bold">Throws:</emphasis> This is declared <computeroutput>noexcept(false)</computeroutput> since C++11 to allow users to program failure handlers that throw exceptions on contract assertion failures (not the default, see  <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__">
+            Throw on Failure</link>). </para></listitem></orderedlist></refsect2><refsect2><title><anchor id="idm45394999237760-bb"/><computeroutput>specify_old_postcondition_except</computeroutput> public member functions</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> 
+  <link linkend="boost.contract.specify__idm45394999207792">specify_postcondition_except</link><phrase role="special">&lt;</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&gt;</phrase> <anchor id="idm45394999237200-bb"/><phrase role="identifier">old</phrase><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Allow to specify old values copied at body. <para>It should often be sufficient to initialize old value pointers as soon as they are declared, without using this function (see  <link linkend="boost_contract.advanced.old_values_copied_at_body"> Old Values Copied at Body</link>).</para><para>
 
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Nullary functor called by this library <computeroutput>f()</computeroutput> to assign old value copies just before the body is executed but after entry invariants (when they apply) and preconditions are checked. Old value pointers within this functor call are usually assigned using <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_OLDOF">BOOST_CONTRACT_OLDOF</link></computeroutput></computeroutput>. Any exception thrown by a call to this functor will result in this library calling <computeroutput><computeroutput><link linkend="boost.contract.old_failure">boost::contract::old_failure</link></computeroutput></computeroutput> (because old values could not be copied to check postconditions and exception guarantees). This functor should capture old value pointers by references so they can be assigned (all other variables needed to evaluate old value expressions can be captured by (constant) value, or better by (constant) reference to avoid extra copies).</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>After old value copies at body have been specified, the object returned by this function allows to optionally specify postconditions and exception guarantees. </para></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> <link linkend="boost.contract.specify_except">specify_except</link> <anchor id="idm45123870086032-bb"/><phrase role="identifier">postcondition</phrase><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Allow to specify postconditions. <para>
+                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Nullary functor called by this library <computeroutput>f()</computeroutput> to assign old value copies just before the body is executed but after entry invariants (when they apply) and preconditions are checked. Old value pointers within this functor call are usually assigned using <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_OLDOF">BOOST_CONTRACT_OLDOF</link></computeroutput></computeroutput>. Any exception thrown by a call to this functor will result in this library calling <computeroutput><computeroutput><link linkend="boost.contract.old_failure">boost::contract::old_failure</link></computeroutput></computeroutput> (because old values could not be copied to check postconditions and exception guarantees). This functor should capture old value pointers by references so they can be assigned (all other variables needed to evaluate old value expressions can be captured by (constant) value, or better by (constant) reference to avoid extra copies).</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>After old values copied at body have been specified, the object returned by this function allows to optionally specify postconditions and exception guarantees. </para></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> <link linkend="boost.contract.specify_except">specify_except</link> <anchor id="idm45394999228704-bb"/><phrase role="identifier">postcondition</phrase><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Allow to specify postconditions. <para>
 
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Functor called by this library to check postconditions <computeroutput>f(...)</computeroutput>. Assertions within this functor are usually programmed using  <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput></computeroutput>, but any exception thrown by a call to this functor indicates a contract assertion failure (and will result in this library calling  <computeroutput><computeroutput><link linkend="boost.contract.postcondition_failure">boost::contract::postcondition_failure</link></computeroutput></computeroutput>). This functor should capture variables by (constant) references (to access the values they will have at function exit). This functor must be a nullary functor if <computeroutput>VirtualResult</computeroutput> is <computeroutput>void</computeroutput>, otherwise it must be a unary functor accepting the return value as a parameter of type <computeroutput>VirtualResult const&amp;</computeroutput> (to avoid extra copies of the return value, or of type <computeroutput>VirtualResult</computeroutput> or <computeroutput>VirtualResult const</computeroutput> if extra copies of the return value are irrelevant).</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>After postconditions have been specified, the object returned by this function allows to optionally specify exception guarantees. </para></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> <link linkend="boost.contract.specify_nothing">specify_nothing</link> <anchor id="idm45123870076784-bb"/><phrase role="identifier">except</phrase><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Allow to specify exception guarantees. <para>
+                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Functor called by this library to check postconditions <computeroutput>f()</computeroutput> or <computeroutput>f(result)</computeroutput>. Assertions within this functor are usually programmed using  <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput></computeroutput>, but any exception thrown by a call to this functor indicates a contract assertion failure (and will result in this library calling  <computeroutput><computeroutput><link linkend="boost.contract.postcondition_failure">boost::contract::postcondition_failure</link></computeroutput></computeroutput>). This functor should capture variables by (constant) references (to access the values they will have at function exit). This functor must be a nullary functor <computeroutput>f()</computeroutput> if <computeroutput>VirtualResult</computeroutput> is <computeroutput>void</computeroutput>, otherwise it must be a unary functor <computeroutput>f(result)</computeroutput> accepting the return value <computeroutput>result</computeroutput> as a parameter of type <computeroutput>VirtualResult const&amp;</computeroutput> (to avoid extra copies of the return value, or of type <computeroutput>VirtualResult</computeroutput> or <computeroutput>VirtualResult const</computeroutput> if extra copies of the return value are irrelevant).</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>After postconditions have been specified, the object returned by this function allows to optionally specify exception guarantees. </para></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> <link linkend="boost.contract.specify_nothing">specify_nothing</link> <anchor id="idm45394999217696-bb"/><phrase role="identifier">except</phrase><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Allow to specify exception guarantees. <para>
 
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Nullary functor called by this library to check exception guarantees <computeroutput>f()</computeroutput>. Assertions within this functor are usually programmed using  <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput></computeroutput>, but any exception thrown by a call to this functor indicates a contract assertion failure (and will result in this library calling  <computeroutput><computeroutput><link linkend="boost.contract.except_failure">boost::contract::except_failure</link></computeroutput></computeroutput>). This functor should capture variables by (constant) references (to access the values they will have at function exit).</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>After exception guarantees have been specified, the object returned by this function does not allow to specify any additional contract. </para></listitem></varlistentry></variablelist></listitem></orderedlist></refsect2></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.specify__idm45123870066880"><refmeta><refentrytitle>Class template specify_postcondition_except</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::specify_postcondition_except</refname><refpurpose>Allow to specify postconditions or exception guarantees. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.specify_hpp">boost/contract/core/specify.hpp</link>&gt;
+                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Nullary functor called by this library to check exception guarantees <computeroutput>f()</computeroutput>. Assertions within this functor are usually programmed using  <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput></computeroutput>, but any exception thrown by a call to this functor indicates a contract assertion failure (and will result in this library calling  <computeroutput><computeroutput><link linkend="boost.contract.except_failure">boost::contract::except_failure</link></computeroutput></computeroutput>). This functor should capture variables by (constant) references (to access the values they will have at function exit).</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>After exception guarantees have been specified, the object returned by this function does not allow to specify any additional contract. </para></listitem></varlistentry></variablelist></listitem></orderedlist></refsect2></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.specify__idm45394999207792"><refmeta><refentrytitle>Class template specify_postcondition_except</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::specify_postcondition_except</refname><refpurpose>Allow to specify postconditions or exception guarantees. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.specify_hpp">boost/contract/core/specify.hpp</link>&gt;
 
 </phrase><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> VirtualResult <phrase role="special">=</phrase> <phrase role="keyword">void</phrase><phrase role="special">&gt;</phrase> 
-<phrase role="keyword">class</phrase> <link linkend="boost.contract.specify__idm45123870066880">specify_postcondition_except</link> <phrase role="special">{</phrase>
+<phrase role="keyword">class</phrase> <link linkend="boost.contract.specify__idm45394999207792">specify_postcondition_except</link> <phrase role="special">{</phrase>
 <phrase role="keyword">public</phrase><phrase role="special">:</phrase>
-  <phrase role="comment">// <link linkend="boost.contract.specify__idm45123870066880construct-copy-destruct">construct/copy/destruct</link></phrase>
-  <link linkend="idm45123870042864-bb"><phrase role="special">~</phrase><phrase role="identifier">specify_postcondition_except</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+  <phrase role="comment">// <link linkend="boost.contract.specify__idm45394999207792construct-copy-destruct">construct/copy/destruct</link></phrase>
+  <link linkend="idm45394999181936-bb"><phrase role="special">~</phrase><phrase role="identifier">specify_postcondition_except</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
 
-  <phrase role="comment">// <link linkend="idm45123870059680-bb">public member functions</link></phrase>
-  <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> <link linkend="boost.contract.specify_except">specify_except</link> <link linkend="idm45123870059120-bb"><phrase role="identifier">postcondition</phrase></link><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
-  <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> <link linkend="boost.contract.specify_nothing">specify_nothing</link> <link linkend="idm45123870049872-bb"><phrase role="identifier">except</phrase></link><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
-<phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>Allow to specify functors this library will call to check postconditions or exception guarantees. This object is internally constructed by this library when users specify contracts calling <computeroutput><link linkend="boost.contract.function">boost::contract::function</link></computeroutput> and similar functions (that is why this class does not have a public constructor).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.postconditions"> Postconditions</link>,  <link linkend="boost_contract.tutorial.exception_guarantees"> Exception Guarantees</link></para>
+  <phrase role="comment">// <link linkend="idm45394999200512-bb">public member functions</link></phrase>
+  <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> <link linkend="boost.contract.specify_except">specify_except</link> <link linkend="idm45394999199952-bb"><phrase role="identifier">postcondition</phrase></link><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+  <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> <link linkend="boost.contract.specify_nothing">specify_nothing</link> <link linkend="idm45394999188944-bb"><phrase role="identifier">except</phrase></link><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+<phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>Allow to specify functors this library will call to check postconditions or exception guarantees. This object is internally constructed by the library when users specify contracts calling <computeroutput><link linkend="boost.contract.function">boost::contract::function</link></computeroutput> and similar functions (that is why this class does not have a public constructor).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.postconditions"> Postconditions</link>,  <link linkend="boost_contract.tutorial.exception_guarantees"> Exception Guarantees</link></para>
 </para>
 
-</para><refsect2><title>Template Parameters</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">typename</phrase> VirtualResult <phrase role="special">=</phrase> <phrase role="keyword">void</phrase></literallayout></para><para><para>Return type of the enclosing function declaring the contract if that function is either a virtual public function or a public function override. Otherwise, this type is always <computeroutput>void</computeroutput>. </para></para></listitem></orderedlist></refsect2><refsect2><title><anchor id="boost.contract.specify__idm45123870066880construct-copy-destruct"/><computeroutput>specify_postcondition_except</computeroutput> 
+</para><refsect2><title>Template Parameters</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">typename</phrase> VirtualResult <phrase role="special">=</phrase> <phrase role="keyword">void</phrase></literallayout></para><para><para>Return type of the enclosing function declaring the contract if that is either a virtual or an overriding public function, otherwise this is always <computeroutput>void</computeroutput>. (Usually this template parameter is automatically deduced by C++ and it does not need to be explicitly specified by programmers.) </para></para></listitem></orderedlist></refsect2><refsect2><title><anchor id="boost.contract.specify__idm45394999207792construct-copy-destruct"/><computeroutput>specify_postcondition_except</computeroutput> 
         public
-       construct/copy/destruct</title><orderedlist><listitem><para><literallayout class="monospaced"><anchor id="idm45123870042864-bb"/><phrase role="special">~</phrase><phrase role="identifier">specify_postcondition_except</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Destruct this object. <para><emphasis role="bold">Throws:</emphasis> This can throw in case programmers specify failure handlers that throw exceptions instead of terminating the program (see  <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__">
-            Throw on Failure</link>). (This is declared <computeroutput>noexcept(false)</computeroutput> since C++11.) </para></listitem></orderedlist></refsect2><refsect2><title><anchor id="idm45123870059680-bb"/><computeroutput>specify_postcondition_except</computeroutput> public member functions</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> <link linkend="boost.contract.specify_except">specify_except</link> <anchor id="idm45123870059120-bb"/><phrase role="identifier">postcondition</phrase><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Allow to specify postconditions. <para>
+       construct/copy/destruct</title><orderedlist><listitem><para><literallayout class="monospaced"><anchor id="idm45394999181936-bb"/><phrase role="special">~</phrase><phrase role="identifier">specify_postcondition_except</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Destruct this object. <para><emphasis role="bold">Throws:</emphasis> This is declared <computeroutput>noexcept(false)</computeroutput> since C++11 to allow users to program failure handlers that throw exceptions on contract assertion failures (not the default, see  <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__">
+            Throw on Failure</link>). </para></listitem></orderedlist></refsect2><refsect2><title><anchor id="idm45394999200512-bb"/><computeroutput>specify_postcondition_except</computeroutput> public member functions</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> <link linkend="boost.contract.specify_except">specify_except</link> <anchor id="idm45394999199952-bb"/><phrase role="identifier">postcondition</phrase><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Allow to specify postconditions. <para>
 
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Functor called by this library to check postconditions <computeroutput>f(...)</computeroutput>. Assertions within this functor are usually programmed using  <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput></computeroutput>, but any exception thrown by a call to this functor indicates a contract assertion failure (and will result in this library calling  <computeroutput><computeroutput><link linkend="boost.contract.postcondition_failure">boost::contract::postcondition_failure</link></computeroutput></computeroutput>). This functor should capture variables by (constant) references (to access the values they will have at function exit). This functor must be a nullary functor if <computeroutput>VirtualResult</computeroutput> is <computeroutput>void</computeroutput>, otherwise it must be a unary functor accepting the return value as a parameter of type <computeroutput>VirtualResult const&amp;</computeroutput> (to avoid extra copies of the return value, or of type <computeroutput>VirtualResult</computeroutput> or <computeroutput>VirtualResult const</computeroutput> if extra copies of the return value are irrelevant).</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>After postconditions have been specified, the object returned by this function allows to optionally specify exception guarantees. </para></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> <link linkend="boost.contract.specify_nothing">specify_nothing</link> <anchor id="idm45123870049872-bb"/><phrase role="identifier">except</phrase><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Allow to specify exception guarantees. <para>
+                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Functor called by this library to check postconditions <computeroutput>f()</computeroutput> or <computeroutput>f(result)</computeroutput>. Assertions within this functor are usually programmed using  <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput></computeroutput>, but any exception thrown by a call to this functor indicates a contract assertion failure (and will result in this library calling  <computeroutput><computeroutput><link linkend="boost.contract.postcondition_failure">boost::contract::postcondition_failure</link></computeroutput></computeroutput>). This functor should capture variables by (constant) references (to access the values they will have at function exit). This functor must be a nullary functor <computeroutput>f()</computeroutput> if <computeroutput>VirtualResult</computeroutput> is <computeroutput>void</computeroutput>, otherwise it must be a unary functor <computeroutput>f(result)</computeroutput> accepting the return value <computeroutput>result</computeroutput> as a parameter of type <computeroutput>VirtualResult const&amp;</computeroutput> (to avoid extra copies of the return value, or of type <computeroutput>VirtualResult</computeroutput> or <computeroutput>VirtualResult const</computeroutput> if extra copies of the return value are irrelevant).</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>After postconditions have been specified, the object returned by this function allows to optionally specify exception guarantees. </para></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> <link linkend="boost.contract.specify_nothing">specify_nothing</link> <anchor id="idm45394999188944-bb"/><phrase role="identifier">except</phrase><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Allow to specify exception guarantees. <para>
 
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Nullary functor called by this library to check exception guarantees <computeroutput>f()</computeroutput>. Assertions within this functor are usually programmed using  <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput></computeroutput>, but any exception thrown by a call to this functor indicates a contract assertion failure (and will result in this library calling  <computeroutput><computeroutput><link linkend="boost.contract.except_failure">boost::contract::except_failure</link></computeroutput></computeroutput>). This functor should capture variables by (constant) references (to access the values they will have at function exit).</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>After exception guarantees have been specified, the object returned by this function does not allow to specify any additional contract. </para></listitem></varlistentry></variablelist></listitem></orderedlist></refsect2></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.specify__idm45123870039968"><refmeta><refentrytitle>Class template specify_precondition_old_postcondition_except</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::specify_precondition_old_postcondition_except</refname><refpurpose>Allow to specify preconditions, old value copies at body, postconditions, and exception guarantees. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.specify_hpp">boost/contract/core/specify.hpp</link>&gt;
+                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Nullary functor called by this library to check exception guarantees <computeroutput>f()</computeroutput>. Assertions within this functor are usually programmed using  <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput></computeroutput>, but any exception thrown by a call to this functor indicates a contract assertion failure (and will result in this library calling  <computeroutput><computeroutput><link linkend="boost.contract.except_failure">boost::contract::except_failure</link></computeroutput></computeroutput>). This functor should capture variables by (constant) references (to access the values they will have at function exit).</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>After exception guarantees have been specified, the object returned by this function does not allow to specify any additional contract. </para></listitem></varlistentry></variablelist></listitem></orderedlist></refsect2></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.specify__idm45394999179040"><refmeta><refentrytitle>Class template specify_precondition_old_postcondition_except</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::specify_precondition_old_postcondition_except</refname><refpurpose>Allow to specify preconditions, old values copied at body, postconditions, and exception guarantees. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.core.specify_hpp">boost/contract/core/specify.hpp</link>&gt;
 
 </phrase><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> VirtualResult <phrase role="special">=</phrase> <phrase role="keyword">void</phrase><phrase role="special">&gt;</phrase> 
-<phrase role="keyword">class</phrase> <link linkend="boost.contract.specify__idm45123870039968">specify_precondition_old_postcondition_except</link> <phrase role="special">{</phrase>
+<phrase role="keyword">class</phrase> <link linkend="boost.contract.specify__idm45394999179040">specify_precondition_old_postcondition_except</link> <phrase role="special">{</phrase>
 <phrase role="keyword">public</phrase><phrase role="special">:</phrase>
-  <phrase role="comment">// <link linkend="boost.contract.specify__idm45123870039968construct-copy-destruct">construct/copy/destruct</link></phrase>
-  <link linkend="idm45123869998800-bb"><phrase role="special">~</phrase><phrase role="identifier">specify_precondition_old_postcondition_except</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+  <phrase role="comment">// <link linkend="boost.contract.specify__idm45394999179040construct-copy-destruct">construct/copy/destruct</link></phrase>
+  <link linkend="idm45394999136032-bb"><phrase role="special">~</phrase><phrase role="identifier">specify_precondition_old_postcondition_except</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
 
-  <phrase role="comment">// <link linkend="idm45123870031168-bb">public member functions</link></phrase>
+  <phrase role="comment">// <link linkend="idm45394999170160-bb">public member functions</link></phrase>
   <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> 
-    <link linkend="boost.contract.specify__idm45123870103104">specify_old_postcondition_except</link><phrase role="special">&lt;</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&gt;</phrase> <link linkend="idm45123870030608-bb"><phrase role="identifier">precondition</phrase></link><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+    <link linkend="boost.contract.specify__idm45394999245856">specify_old_postcondition_except</link><phrase role="special">&lt;</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&gt;</phrase> <link linkend="idm45394999169600-bb"><phrase role="identifier">precondition</phrase></link><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
   <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> 
-    <link linkend="boost.contract.specify__idm45123870066880">specify_postcondition_except</link><phrase role="special">&lt;</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&gt;</phrase> <link linkend="idm45123870023552-bb"><phrase role="identifier">old</phrase></link><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
-  <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> <link linkend="boost.contract.specify_except">specify_except</link> <link linkend="idm45123870015056-bb"><phrase role="identifier">postcondition</phrase></link><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
-  <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> <link linkend="boost.contract.specify_nothing">specify_nothing</link> <link linkend="idm45123870005808-bb"><phrase role="identifier">except</phrase></link><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
-<phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>Allow to specify functors this library will call to check preconditions, copy old values at body, check postconditions, and check exception guarantees. This object is internally constructed by this library when users specify contracts calling <computeroutput><link linkend="boost.contract.function">boost::contract::function</link></computeroutput> and similar functions (that is why this class does not have a public constructor).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.preconditions"> Preconditions</link>,  <link linkend="boost_contract.advanced.old_value_copies_at_body"> Old Value Copies at Body</link>,  <link linkend="boost_contract.tutorial.postconditions"> Postconditions</link>,  <link linkend="boost_contract.tutorial.exception_guarantees"> Exception Guarantees</link></para>
+    <link linkend="boost.contract.specify__idm45394999207792">specify_postcondition_except</link><phrase role="special">&lt;</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&gt;</phrase> <link linkend="idm45394999162544-bb"><phrase role="identifier">old</phrase></link><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+  <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> <link linkend="boost.contract.specify_except">specify_except</link> <link linkend="idm45394999154048-bb"><phrase role="identifier">postcondition</phrase></link><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+  <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> <link linkend="boost.contract.specify_nothing">specify_nothing</link> <link linkend="idm45394999143040-bb"><phrase role="identifier">except</phrase></link><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+<phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>Allow to specify functors this library will call to check preconditions, copy old values at body, check postconditions, and check exception guarantees. This object is internally constructed by the library when users specify contracts calling <computeroutput><link linkend="boost.contract.function">boost::contract::function</link></computeroutput> and similar functions (that is why this class does not have a public constructor).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.preconditions"> Preconditions</link>,  <link linkend="boost_contract.advanced.old_values_copied_at_body"> Old Values Copied at Body</link>,  <link linkend="boost_contract.tutorial.postconditions"> Postconditions</link>,  <link linkend="boost_contract.tutorial.exception_guarantees"> Exception Guarantees</link></para>
 </para>
 
-</para><refsect2><title>Template Parameters</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">typename</phrase> VirtualResult <phrase role="special">=</phrase> <phrase role="keyword">void</phrase></literallayout></para><para><para>Return type of the enclosing function declaring the contract if that function is either a virtual public function or a public function override. Otherwise, this type is always <computeroutput>void</computeroutput>. </para></para></listitem></orderedlist></refsect2><refsect2><title><anchor id="boost.contract.specify__idm45123870039968construct-copy-destruct"/><computeroutput>specify_precondition_old_postcondition_except</computeroutput> 
+</para><refsect2><title>Template Parameters</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">typename</phrase> VirtualResult <phrase role="special">=</phrase> <phrase role="keyword">void</phrase></literallayout></para><para><para>Return type of the enclosing function declaring the contract if that is either a virtual or an overriding public function, otherwise this is always <computeroutput>void</computeroutput>. (Usually this template parameter is automatically deduced by C++ and it does not need to be explicitly specified by programmers.) </para></para></listitem></orderedlist></refsect2><refsect2><title><anchor id="boost.contract.specify__idm45394999179040construct-copy-destruct"/><computeroutput>specify_precondition_old_postcondition_except</computeroutput> 
         public
-       construct/copy/destruct</title><orderedlist><listitem><para><literallayout class="monospaced"><anchor id="idm45123869998800-bb"/><phrase role="special">~</phrase><phrase role="identifier">specify_precondition_old_postcondition_except</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Destruct this object. <para><emphasis role="bold">Throws:</emphasis> This can throw in case programmers specify failure handlers that throw exceptions instead of terminating the program (see  <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__">
-            Throw on Failure</link>). (This is declared <computeroutput>noexcept(false)</computeroutput> since C++11.) </para></listitem></orderedlist></refsect2><refsect2><title><anchor id="idm45123870031168-bb"/><computeroutput>specify_precondition_old_postcondition_except</computeroutput> public member functions</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> 
-  <link linkend="boost.contract.specify__idm45123870103104">specify_old_postcondition_except</link><phrase role="special">&lt;</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&gt;</phrase> <anchor id="idm45123870030608-bb"/><phrase role="identifier">precondition</phrase><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Allow to specify preconditions. <para>
+       construct/copy/destruct</title><orderedlist><listitem><para><literallayout class="monospaced"><anchor id="idm45394999136032-bb"/><phrase role="special">~</phrase><phrase role="identifier">specify_precondition_old_postcondition_except</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Destruct this object. <para><emphasis role="bold">Throws:</emphasis> This is declared <computeroutput>noexcept(false)</computeroutput> since C++11 to allow users to program failure handlers that throw exceptions on contract assertion failures (not the default, see  <link linkend="boost_contract.advanced.throw_on_failures__and__noexcept__">
+            Throw on Failure</link>). </para></listitem></orderedlist></refsect2><refsect2><title><anchor id="idm45394999170160-bb"/><computeroutput>specify_precondition_old_postcondition_except</computeroutput> public member functions</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> 
+  <link linkend="boost.contract.specify__idm45394999245856">specify_old_postcondition_except</link><phrase role="special">&lt;</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&gt;</phrase> <anchor id="idm45394999169600-bb"/><phrase role="identifier">precondition</phrase><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Allow to specify preconditions. <para>
 
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Nullary functor called by this library to check preconditions <computeroutput>f()</computeroutput>. Assertions within this functor are usually programmed using  <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput></computeroutput>, but any exception thrown by a call to this functor indicates a contract assertion failure (and will result in this library calling  <computeroutput><computeroutput><link linkend="boost.contract.precondition_failure">boost::contract::precondition_failure</link></computeroutput></computeroutput>). This functor should capture variables by (constant) value, or better by (constant) reference (to avoid extra copies).</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>After preconditions have been specified, the object returned by this function allows to optionally specify old value copies at body, postconditions, and exception guarantees. </para></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> 
-  <link linkend="boost.contract.specify__idm45123870066880">specify_postcondition_except</link><phrase role="special">&lt;</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&gt;</phrase> <anchor id="idm45123870023552-bb"/><phrase role="identifier">old</phrase><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Allow to specify old value copies at body. <para>It should often be sufficient to initialize old value pointers as soon as they are declared, without using this function (see  <link linkend="boost_contract.advanced.old_value_copies_at_body"> Old Value Copies at Body</link>).</para><para>
+                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Nullary functor called by this library to check preconditions <computeroutput>f()</computeroutput>. Assertions within this functor are usually programmed using  <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput></computeroutput>, but any exception thrown by a call to this functor indicates a contract assertion failure (and will result in this library calling  <computeroutput><computeroutput><link linkend="boost.contract.precondition_failure">boost::contract::precondition_failure</link></computeroutput></computeroutput>). This functor should capture variables by (constant) value, or better by (constant) reference (to avoid extra copies).</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>After preconditions have been specified, the object returned by this function allows to optionally specify old values copied at body, postconditions, and exception guarantees. </para></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> 
+  <link linkend="boost.contract.specify__idm45394999207792">specify_postcondition_except</link><phrase role="special">&lt;</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&gt;</phrase> <anchor id="idm45394999162544-bb"/><phrase role="identifier">old</phrase><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Allow to specify old values copied at body. <para>It should often be sufficient to initialize old value pointers as soon as they are declared, without using this function (see  <link linkend="boost_contract.advanced.old_values_copied_at_body"> Old Values Copied at Body</link>).</para><para>
 
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Nullary functor called by this library <computeroutput>f()</computeroutput> to assign old value copies just before the body is executed but after entry invariants (when they apply) and preconditions are checked. Old value pointers within this functor call are usually assigned using <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_OLDOF">BOOST_CONTRACT_OLDOF</link></computeroutput></computeroutput>. Any exception thrown by a call to this functor will result in this library calling <computeroutput><computeroutput><link linkend="boost.contract.old_failure">boost::contract::old_failure</link></computeroutput></computeroutput> (because old values could not be copied to check postconditions and exception guarantees). This functor should capture old value pointers by references so they can be assigned (all other variables needed to evaluate old value expressions can be captured by (constant) value, or better by (constant) reference to avoid extra copies).</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>After old value copies at body have been specified, the object returned by this functions allows to optionally specify postconditions and exception guarantees. </para></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> <link linkend="boost.contract.specify_except">specify_except</link> <anchor id="idm45123870015056-bb"/><phrase role="identifier">postcondition</phrase><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Allow to specify postconditions. <para>
+                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Nullary functor called by this library <computeroutput>f()</computeroutput> to assign old value copies just before the body is executed but after entry invariants (when they apply) and preconditions are checked. Old value pointers within this functor call are usually assigned using <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_OLDOF">BOOST_CONTRACT_OLDOF</link></computeroutput></computeroutput>. Any exception thrown by a call to this functor will result in this library calling <computeroutput><computeroutput><link linkend="boost.contract.old_failure">boost::contract::old_failure</link></computeroutput></computeroutput> (because old values could not be copied to check postconditions and exception guarantees). This functor should capture old value pointers by references so they can be assigned (all other variables needed to evaluate old value expressions can be captured by (constant) value, or better by (constant) reference to avoid extra copies).</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>After old values copied at body have been specified, the object returned by this functions allows to optionally specify postconditions and exception guarantees. </para></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> <link linkend="boost.contract.specify_except">specify_except</link> <anchor id="idm45394999154048-bb"/><phrase role="identifier">postcondition</phrase><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Allow to specify postconditions. <para>
 
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Functor called by this library to check postconditions <computeroutput>f(...)</computeroutput>. Assertions within this functor are usually programmed using  <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput></computeroutput>, but any exception thrown by a call to this functor indicates a contract assertion failure (and will result in this library calling  <computeroutput><computeroutput><link linkend="boost.contract.postcondition_failure">boost::contract::postcondition_failure</link></computeroutput></computeroutput>). This functor should capture variables by (constant) references (to access the values they will have at function exit). This functor must be a nullary functor if <computeroutput>VirtualResult</computeroutput> is <computeroutput>void</computeroutput>, otherwise it must be a unary functor accepting the return value as a parameter of type <computeroutput>VirtualResult const&amp;</computeroutput> (to avoid extra copies of the return value, or of type <computeroutput>VirtualResult</computeroutput> or <computeroutput>VirtualResult const</computeroutput> if extra copies of the return value are irrelevant).</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>After postconditions have been specified, the object returned by this function allows to optionally specify exception guarantees. </para></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> <link linkend="boost.contract.specify_nothing">specify_nothing</link> <anchor id="idm45123870005808-bb"/><phrase role="identifier">except</phrase><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Allow to specify exception guarantees. <para>
+                ?><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>Functor called by this library to check postconditions <computeroutput>f()</computeroutput> or <computeroutput>f(result)</computeroutput>. Assertions within this functor are usually programmed using  <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput></computeroutput>, but any exception thrown by a call to this functor indicates a contract assertion failure (and will result in this library calling  <computeroutput><computeroutput><link linkend="boost.contract.postcondition_failure">boost::contract::postcondition_failure</link></computeroutput></computeroutput>). This functor should capture variables by (constant) references (to access the values they will have at function exit). This functor must be a nullary functor <computeroutput>f()</computeroutput> if <computeroutput>VirtualResult</computeroutput> is <computeroutput>void</computeroutput>, otherwise it must be a unary functor <computeroutput>f(result)</computeroutput> accepting the return value <computeroutput>result</computeroutput> as a parameter of type <computeroutput>VirtualResult const&amp;</computeroutput> (to avoid extra copies of the return value, or of type <computeroutput>VirtualResult</computeroutput> or <computeroutput>VirtualResult const</computeroutput> if extra copies of the return value are irrelevant).</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>After postconditions have been specified, the object returned by this function allows to optionally specify exception guarantees. </para></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> F<phrase role="special">&gt;</phrase> <link linkend="boost.contract.specify_nothing">specify_nothing</link> <anchor id="idm45394999143040-bb"/><phrase role="identifier">except</phrase><phrase role="special">(</phrase><phrase role="identifier">F</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> f<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Allow to specify exception guarantees. <para>
 
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
@@ -15086,7 +15326,15 @@ In general, it is not recommended to define this macro because these compile-tim
 
 </phrase>
 <phrase role="keyword">class</phrase> <link linkend="boost.contract.virtual_">virtual_</link> <phrase role="special">{</phrase>
-<phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>Virtual public functions (and therefore also public function overrides) declaring contracts using this library must specify an extra function parameter at the very end of the parameter list. This parameter must be a pointer to this class and it must have default value <computeroutput>0</computeroutput> (i.e., <computeroutput>nullptr</computeroutput>). (This extra parameter is often named <computeroutput>v</computeroutput> in this documentation, but any name can be used.)</para><para>In practice this extra parameter does not alter the calling interface of the enclosing function declaring the contract because it is always the very last parameter and it has a default value (so it can always be omitted when users call the function). This extra parameter must be passed to  <computeroutput><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput>, <computeroutput><link linkend="BOOST_CONTRACT_OLDOF">BOOST_CONTRACT_OLDOF</link></computeroutput>, and all other operations of this library that accept a pointer to  <computeroutput><link linkend="boost.contract.virtual_">boost::contract::virtual_</link></computeroutput>. A part from that, this class is not intended to be directly used by programmers (and that is why this class does not have any public member and it is not copyable).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.virtual_public_functions"> Virtual Public Functions</link>,  <link linkend="boost_contract.tutorial.public_function_overrides__subcontracting_">
+<phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>Virtual public functions (and therefore also public function overrides) declaring contracts using this library must specify an extra function parameter at the very end of their parameter list. This parameter must be a pointer to this class and it must have default value <computeroutput>0</computeroutput> or <computeroutput>nullptr</computeroutput> (this extra parameter is often named <computeroutput>v</computeroutput> in this documentation, but any name can be used):</para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase> <phrase role="special">{</phrase>
+<phrase role="keyword">public</phrase><phrase role="special">:</phrase>
+    <phrase role="keyword">virtual</phrase> <phrase role="keyword">void</phrase> <phrase role="identifier">f</phrase><phrase role="special">(</phrase><phrase role="keyword">int</phrase> <phrase role="identifier">x</phrase><phrase role="special">,</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">virtual_</phrase><phrase role="special">*</phrase> <phrase role="identifier">v</phrase> <phrase role="special">=</phrase> <phrase role="number">0</phrase><phrase role="special">)</phrase> <phrase role="special">{</phrase> <phrase role="comment">// Declare `v`.</phrase>
+        <phrase role="special">...</phrase> <phrase role="comment">// Contract declaration (which will use `v`) and function body.</phrase>
+    <phrase role="special">}</phrase>
+
+    <phrase role="special">...</phrase>
+<phrase role="special">}</phrase><phrase role="special">;</phrase>
+</programlisting></para><para>In practice this extra parameter does not alter the calling interface of the enclosing function declaring the contract because it is always the very last parameter and it has a default value (so it can always be omitted when users call the function). This extra parameter must be passed to  <computeroutput><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput>, <computeroutput><link linkend="BOOST_CONTRACT_OLDOF">BOOST_CONTRACT_OLDOF</link></computeroutput>, and all other operations of this library that accept a pointer to  <computeroutput><link linkend="boost.contract.virtual_">boost::contract::virtual_</link></computeroutput>. A part from that, this class is not intended to be directly used by programmers (and that is why this class does not have any public member and it is not copyable).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.virtual_public_functions"> Virtual Public Functions</link>,  <link linkend="boost_contract.tutorial.public_function_overrides__subcontracting_">
         Public Function Overrides</link> </para>
 </para>
 </para></refsect1></refentry>
@@ -15094,14 +15342,14 @@ In general, it is not recommended to define this macro because these compile-tim
 <section id="header.boost.contract.destructor_hpp"><title>Header &lt;<ulink url="../../../../boost/contract/destructor.hpp">boost/contract/destructor.hpp</ulink>&gt;</title><para>Program contracts for destructors. </para><synopsis xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">namespace</phrase> <phrase role="identifier">boost</phrase> <phrase role="special">{</phrase>
   <phrase role="keyword">namespace</phrase> <phrase role="identifier">contract</phrase> <phrase role="special">{</phrase>
     <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Class<phrase role="special">&gt;</phrase> 
-      <link linkend="boost.contract.specify__idm45123870103104">specify_old_postcondition_except</link> <link linkend="boost.contract.destructor"><phrase role="identifier">destructor</phrase></link><phrase role="special">(</phrase><phrase role="identifier">Class</phrase> <phrase role="special">*</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+      <link linkend="boost.contract.specify__idm45394999245856">specify_old_postcondition_except</link> <link linkend="boost.contract.destructor"><phrase role="identifier">destructor</phrase></link><phrase role="special">(</phrase><phrase role="identifier">Class</phrase> <phrase role="special">*</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
   <phrase role="special">}</phrase>
 <phrase role="special">}</phrase></synopsis>
 <refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.destructor"><refmeta><refentrytitle>Function template destructor</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::destructor</refname><refpurpose>Program contracts for destructors. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.destructor_hpp">boost/contract/destructor.hpp</link>&gt;
 
 </phrase>
 <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Class<phrase role="special">&gt;</phrase> 
-  <link linkend="boost.contract.specify__idm45123870103104">specify_old_postcondition_except</link> <phrase role="identifier">destructor</phrase><phrase role="special">(</phrase><phrase role="identifier">Class</phrase> <phrase role="special">*</phrase> obj<phrase role="special">)</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is used to specify postconditions, exception guarantees, old value copies at body, and check class invariants for destructors (destructors cannot not have preconditions, see  <link linkend="boost_contract.contract_programming_overview.destructor_calls"> Destructor Calls</link>):</para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase> <phrase role="special">{</phrase>
+  <link linkend="boost.contract.specify__idm45394999245856">specify_old_postcondition_except</link> <phrase role="identifier">destructor</phrase><phrase role="special">(</phrase><phrase role="identifier">Class</phrase> <phrase role="special">*</phrase> obj<phrase role="special">)</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is used to specify postconditions, exception guarantees, old value copies at body, and check class invariants for destructors (destructors cannot have preconditions, see  <link linkend="boost_contract.contract_programming_overview.destructor_calls"> Destructor Calls</link>):</para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase> <phrase role="special">{</phrase>
     <phrase role="keyword">friend</phrase> <phrase role="keyword">class</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">access</phrase><phrase role="special">;</phrase>
 
     <phrase role="keyword">void</phrase> <phrase role="identifier">invariant</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase> <phrase role="special">{</phrase> <phrase role="comment">// Optional (as for static and volatile).</phrase>
@@ -15146,17 +15394,17 @@ In general, it is not recommended to define this macro because these compile-tim
             Class Invariants</link> and  <link linkend="boost_contract.extras.volatile_public_functions">
             Volatile Public Functions</link>).</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Template Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>Class</computeroutput></term><listitem><para>The type of the class containing the destructor declaring the contract. (Usually this template parameter is automatically deduced by C++ and it does not need to be explicitly specified by programmers.)</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>The result of this function must be explicitly assigned to a variable of type <computeroutput><link linkend="boost.contract.check">boost::contract::check</link></computeroutput> declared locally just before the code of the destructor body (otherwise this library will generate a run-time error, see <computeroutput><link linkend="BOOST_CO_idm45123870548928">BOOST_CONTRACT_ON_MISSING_CHECK_DECL</link></computeroutput>). </para></listitem></varlistentry></variablelist></refsect1></refentry>
+                ?><varlistentry><term><computeroutput>Class</computeroutput></term><listitem><para>The type of the class containing the destructor declaring the contract. (Usually this template parameter is automatically deduced by C++ and it does not need to be explicitly specified by programmers.)</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>The result of this function must be assigned to a variable of type  <computeroutput><link linkend="boost.contract.check">boost::contract::check</link></computeroutput> declared explicitly (i.e., without using C++11 <computeroutput>auto</computeroutput> declarations) and locally just before the code of the destructor body (otherwise this library will generate a run-time error, see <computeroutput><link linkend="BOOST_CO_idm45394999694064">BOOST_CONTRACT_ON_MISSING_CHECK_DECL</link></computeroutput>). </para></listitem></varlistentry></variablelist></refsect1></refentry>
 </section>
 <section id="header.boost.contract.function_hpp"><title>Header &lt;<ulink url="../../../../boost/contract/function.hpp">boost/contract/function.hpp</ulink>&gt;</title><para>Program contracts for (non-public) functions. </para><synopsis xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">namespace</phrase> <phrase role="identifier">boost</phrase> <phrase role="special">{</phrase>
   <phrase role="keyword">namespace</phrase> <phrase role="identifier">contract</phrase> <phrase role="special">{</phrase>
-    <link linkend="boost.contract.specify__idm45123870039968">specify_precondition_old_postcondition_except</link> <link linkend="boost.contract.function"><phrase role="identifier">function</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+    <link linkend="boost.contract.specify__idm45394999179040">specify_precondition_old_postcondition_except</link> <link linkend="boost.contract.function"><phrase role="identifier">function</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
   <phrase role="special">}</phrase>
 <phrase role="special">}</phrase></synopsis>
 <refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.function"><refmeta><refentrytitle>Function function</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::function</refname><refpurpose>Program contracts for non-member, private and protected functions. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.function_hpp">boost/contract/function.hpp</link>&gt;
 
 </phrase>
-<link linkend="boost.contract.specify__idm45123870039968">specify_precondition_old_postcondition_except</link> <phrase role="identifier">function</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is used to specify preconditions, postconditions, exception guarantees, and old value copies at body for non-member, private and protected functions (these functions never check class invariants, see  <link linkend="boost_contract.contract_programming_overview.function_calls"> Function Calls</link>):</para><para><programlisting><phrase role="keyword">void</phrase> <phrase role="identifier">f</phrase><phrase role="special">(</phrase><phrase role="special">...</phrase><phrase role="special">)</phrase> <phrase role="special">{</phrase>
+<link linkend="boost.contract.specify__idm45394999179040">specify_precondition_old_postcondition_except</link> <phrase role="identifier">function</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is used to specify preconditions, postconditions, exception guarantees, and old value copies at body for non-member, private and protected functions (these functions never check class invariants, see  <link linkend="boost_contract.contract_programming_overview.function_calls"> Function Calls</link>):</para><para><programlisting><phrase role="keyword">void</phrase> <phrase role="identifier">f</phrase><phrase role="special">(</phrase><phrase role="special">...</phrase><phrase role="special">)</phrase> <phrase role="special">{</phrase>
     <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">old_ptr</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">old_type</phrase><phrase role="special">&gt;</phrase> <phrase role="identifier">old_var</phrase><phrase role="special">;</phrase>
     <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">check</phrase> <phrase role="identifier">c</phrase> <phrase role="special">=</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">function</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase>
         <phrase role="special">.</phrase><phrase role="identifier">precondition</phrase><phrase role="special">(</phrase><phrase role="special">[</phrase><phrase role="special">&amp;</phrase><phrase role="special">]</phrase> <phrase role="special">{</phrase> <phrase role="comment">// Optional.</phrase>
@@ -15186,7 +15434,7 @@ In general, it is not recommended to define this macro because these compile-tim
 
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
-        ?><varlistentry><term>Returns:</term><listitem><para>The result of this function must be explicitly assigned to a variable of type <computeroutput><link linkend="boost.contract.check">boost::contract::check</link></computeroutput> declared locally just before the function body code (otherwise this library will generate a run-time error, see <computeroutput><link linkend="BOOST_CO_idm45123870548928">BOOST_CONTRACT_ON_MISSING_CHECK_DECL</link></computeroutput>). </para></listitem></varlistentry></variablelist></refsect1></refentry>
+        ?><varlistentry><term>Returns:</term><listitem><para>The result of this function must be assigned to a variable of type  <computeroutput><link linkend="boost.contract.check">boost::contract::check</link></computeroutput> declared explicitly (i.e., without using C++11 <computeroutput>auto</computeroutput> declarations) and locally just before the code of the function body (otherwise this library will generate a run-time error, see <computeroutput><link linkend="BOOST_CO_idm45394999694064">BOOST_CONTRACT_ON_MISSING_CHECK_DECL</link></computeroutput>). </para></listitem></varlistentry></variablelist></refsect1></refentry>
 </section>
 <section id="header.boost.contract.old_hpp"><title>Header &lt;<ulink url="../../../../boost/contract/old.hpp">boost/contract/old.hpp</ulink>&gt;</title><para>Handle old values. </para><synopsis xmlns:xi="http://www.w3.org/2001/XInclude">
 
@@ -15201,40 +15449,40 @@ In general, it is not recommended to define this macro because these compile-tim
 
     <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> T<phrase role="special">&gt;</phrase> <phrase role="keyword">struct</phrase> <link linkend="boost.contract.old_value_copy">old_value_copy</link><phrase role="special">;</phrase>
     <link linkend="boost.contract.old_value">old_value</link> <link linkend="boost.contract.null_old"><phrase role="identifier">null_old</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
-    <link linkend="boost.contract.old_pointer">old_pointer</link> <link linkend="boost.contract.make_old_idm45123869837456"><phrase role="identifier">make_old</phrase></link><phrase role="special">(</phrase><link linkend="boost.contract.old_value">old_value</link> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
-    <link linkend="boost.contract.old_pointer">old_pointer</link> <link linkend="boost.contract.make_old_idm45123869826992"><phrase role="identifier">make_old</phrase></link><phrase role="special">(</phrase><link linkend="boost.contract.virtual_">virtual_</link> <phrase role="special">*</phrase><phrase role="special">,</phrase> <link linkend="boost.contract.old_value">old_value</link> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
-    <phrase role="keyword">bool</phrase> <link linkend="boost.contract.copy_old_idm45123869813440"><phrase role="identifier">copy_old</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
-    <phrase role="keyword">bool</phrase> <link linkend="boost.contract.copy_old_idm45123869807296"><phrase role="identifier">copy_old</phrase></link><phrase role="special">(</phrase><link linkend="boost.contract.virtual_">virtual_</link> <phrase role="special">*</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+    <link linkend="boost.contract.old_pointer">old_pointer</link> <link linkend="boost.contract.make_old_idm45394998968720"><phrase role="identifier">make_old</phrase></link><phrase role="special">(</phrase><link linkend="boost.contract.old_value">old_value</link> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+    <link linkend="boost.contract.old_pointer">old_pointer</link> <link linkend="boost.contract.make_old_idm45394998958240"><phrase role="identifier">make_old</phrase></link><phrase role="special">(</phrase><link linkend="boost.contract.virtual_">virtual_</link> <phrase role="special">*</phrase><phrase role="special">,</phrase> <link linkend="boost.contract.old_value">old_value</link> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+    <phrase role="keyword">bool</phrase> <link linkend="boost.contract.copy_old_idm45394998944672"><phrase role="identifier">copy_old</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+    <phrase role="keyword">bool</phrase> <link linkend="boost.contract.copy_old_idm45394998938528"><phrase role="identifier">copy_old</phrase></link><phrase role="special">(</phrase><link linkend="boost.contract.virtual_">virtual_</link> <phrase role="special">*</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
   <phrase role="special">}</phrase>
 <phrase role="special">}</phrase></synopsis>
 <refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.is_old_value_copyable"><refmeta><refentrytitle>Struct template is_old_value_copyable</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::is_old_value_copyable</refname><refpurpose>Trait to check if an old value type can be copied or not. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.old_hpp">boost/contract/old.hpp</link>&gt;
 
 </phrase><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> T<phrase role="special">&gt;</phrase> 
 <phrase role="keyword">struct</phrase> <link linkend="boost.contract.is_old_value_copyable">is_old_value_copyable</link> <phrase role="special">:</phrase> <phrase role="keyword">public</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">is_copy_constructible</phrase><phrase role="special">&lt;</phrase> <phrase role="identifier">T</phrase> <phrase role="special">&gt;</phrase> <phrase role="special">{</phrase>
-<phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>By default, this unary boolean meta-function is equivalent to <computeroutput>boost::is_copy_constructible&lt;T&gt;</computeroutput> but programmers can chose to specialize it for user-defined types (in general some kind of specialization is needed on compilers that do not support C++11, see <ulink url="http://www.boost.org/doc/libs/release/libs/type_traits/doc/html/boost_typetraits/reference/is_copy_constructible.html"><computeroutput>boost::is_copy_constructible</computeroutput></ulink>):</para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase><phrase role="special">;</phrase> <phrase role="comment">// Some user-defined type.</phrase>
+<phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>By default, this unary boolean meta-function is equivalent to <computeroutput>boost::is_copy_constructible&lt;T&gt;</computeroutput> but programmers can chose to specialize it for user-defined types (in general some kind of specialization is also needed on compilers that do not support C++11, see <ulink url="http://www.boost.org/doc/libs/release/libs/type_traits/doc/html/boost_typetraits/reference/is_copy_constructible.html"><computeroutput>boost::is_copy_constructible</computeroutput></ulink>):</para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase><phrase role="special">;</phrase> <phrase role="comment">// Some user-defined type for which old values shall not be copied.</phrase>
 
 <phrase role="keyword">namespace</phrase> <phrase role="identifier">boost</phrase> <phrase role="special">{</phrase> <phrase role="keyword">namespace</phrase> <phrase role="identifier">contract</phrase> <phrase role="special">{</phrase>
-    <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="special">&gt;</phrase> <phrase role="comment">// Specialization.</phrase>
+    <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="special">&gt;</phrase> <phrase role="comment">// Specialization to not copy old values of type `u`.</phrase>
     <phrase role="keyword">struct</phrase> <phrase role="identifier">is_old_value_copyable</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">u</phrase><phrase role="special">&gt;</phrase> <phrase role="special">:</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">false_type</phrase> <phrase role="special">{</phrase><phrase role="special">}</phrase><phrase role="special">;</phrase>
 <phrase role="special">}</phrase> <phrase role="special">}</phrase> <phrase role="comment">// namespace</phrase>
-</programlisting></para><para>In summary, a given old value type <computeroutput>T</computeroutput> is copied only if <computeroutput>boost::contract::is_old_value_copyable&lt;T&gt;::value</computeroutput> is <computeroutput>true</computeroutput>. Copyable old value types are always copied using <computeroutput>boost::contract::old_value_copy&lt;T&gt;</computeroutput>. Non-copyable old value types generate a compile-time error when <computeroutput>boost::contract::old_ptr&lt;T&gt;</computeroutput> is dereferenced, but instead leave <computeroutput>boost::contract::old_ptr_if_copyable&lt;T&gt;</computeroutput> always null (without generating compile-time errors).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.extras.old_value_requirements__templates_">
+</programlisting></para><para>A given old value type <computeroutput>T</computeroutput> is copied only if <computeroutput>boost::contract::is_old_value_copyable&lt;T&gt;::value</computeroutput> is <computeroutput>true</computeroutput>. A copyable old value type <computeroutput>V</computeroutput> is always copied using <computeroutput>boost::contract::old_value_copy&lt;V&gt;</computeroutput>. A non-copyable old value type <computeroutput>W</computeroutput> generates a compile-time error when <computeroutput>boost::contract::old_ptr&lt;W&gt;</computeroutput> is dereferenced, but instead leaves <computeroutput>boost::contract::old_ptr_if_copyable&lt;W&gt;</computeroutput> always null (without generating compile-time errors).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.extras.old_value_requirements__templates_">
         Old Value Requirements</link> </para>
 </para>
-</para></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.old_pointer"><refmeta><refentrytitle>Class old_pointer</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::old_pointer</refname><refpurpose>Convert old value copies to old value pointers. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.old_hpp">boost/contract/old.hpp</link>&gt;
+</para></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.old_pointer"><refmeta><refentrytitle>Class old_pointer</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::old_pointer</refname><refpurpose>Convert old value copies into old value pointers. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.old_hpp">boost/contract/old.hpp</link>&gt;
 
 </phrase>
 <phrase role="keyword">class</phrase> <link linkend="boost.contract.old_pointer">old_pointer</link> <phrase role="special">{</phrase>
 <phrase role="keyword">public</phrase><phrase role="special">:</phrase>
 
-  <phrase role="comment">// <link linkend="idm45123869940320-bb">public member functions</link></phrase>
-  <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> T<phrase role="special">&gt;</phrase> <link linkend="idm45123869939760-bb"><phrase role="keyword">operator</phrase> <phrase role="identifier">old_ptr_if_copyable</phrase><phrase role="special">&lt;</phrase> <phrase role="identifier">T</phrase> <phrase role="special">&gt;</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
-  <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> T<phrase role="special">&gt;</phrase> <link linkend="idm45123869935008-bb"><phrase role="keyword">operator</phrase> <phrase role="identifier">old_ptr</phrase><phrase role="special">&lt;</phrase> <phrase role="identifier">T</phrase> <phrase role="special">&gt;</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
-<phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This class is often only implicitly used by this library and it does not explicitly appear in user code (that is why this class does not have public constructors, etc.). </para><refsect2><title><anchor id="idm45123869940320-bb"/><computeroutput>old_pointer</computeroutput> public member functions</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> T<phrase role="special">&gt;</phrase> <anchor id="idm45123869939760-bb"/><phrase role="keyword">operator</phrase> <phrase role="identifier">old_ptr_if_copyable</phrase><phrase role="special">&lt;</phrase> <phrase role="identifier">T</phrase> <phrase role="special">&gt;</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Convert this object to an actual old value pointer for which the old value type <computeroutput>T</computeroutput> might or not be copyable. <para>For example, this is implicitly called when assigning or initializing old value pointers.</para><para>
+  <phrase role="comment">// <link linkend="idm45394999074832-bb">public member functions</link></phrase>
+  <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> T<phrase role="special">&gt;</phrase> <link linkend="idm45394999074272-bb"><phrase role="keyword">operator</phrase> <phrase role="identifier">old_ptr_if_copyable</phrase><phrase role="special">&lt;</phrase> <phrase role="identifier">T</phrase> <phrase role="special">&gt;</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+  <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> T<phrase role="special">&gt;</phrase> <link linkend="idm45394999068640-bb"><phrase role="keyword">operator</phrase> <phrase role="identifier">old_ptr</phrase><phrase role="special">&lt;</phrase> <phrase role="identifier">T</phrase> <phrase role="special">&gt;</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+<phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This class is usually only implicitly used by this library and it does not explicitly appear in user code (that is why this class does not have public constructors, etc.). </para><refsect2><title><anchor id="idm45394999074832-bb"/><computeroutput>old_pointer</computeroutput> public member functions</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> T<phrase role="special">&gt;</phrase> <anchor id="idm45394999074272-bb"/><phrase role="keyword">operator</phrase> <phrase role="identifier">old_ptr_if_copyable</phrase><phrase role="special">&lt;</phrase> <phrase role="identifier">T</phrase> <phrase role="special">&gt;</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Convert this object to an actual old value pointer for which the old value type <computeroutput>T</computeroutput> might or not be copyable. <para>For example, this is implicitly called when assigning or initializing old value pointers of type <computeroutput><computeroutput><link linkend="boost.contract.old_ptr_if_copyable">boost::contract::old_ptr_if_copyable</link></computeroutput></computeroutput>.</para><para>
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Template Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>T</computeroutput></term><listitem><para>Type of the pointed old value. The old value pointer will always be null if this type is not copyable (see <computeroutput><computeroutput><link linkend="boost.contract.is_old_value_copyable">boost::contract::is_old_value_copyable</link></computeroutput></computeroutput>), but this library will not generate a compile-time error. </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> T<phrase role="special">&gt;</phrase> <anchor id="idm45123869935008-bb"/><phrase role="keyword">operator</phrase> <phrase role="identifier">old_ptr</phrase><phrase role="special">&lt;</phrase> <phrase role="identifier">T</phrase> <phrase role="special">&gt;</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Convert this object to an actual old value pointer for which the old value type <computeroutput>T</computeroutput> must be copyable. <para>For example, this is implicitly called when assigning or initializing old value pointers.</para><para>
+                ?><varlistentry><term><computeroutput>T</computeroutput></term><listitem><para>Type of the pointed old value. The old value pointer will always be null if this type is not copyable (see <computeroutput><computeroutput><link linkend="boost.contract.is_old_value_copyable">boost::contract::is_old_value_copyable</link></computeroutput></computeroutput>), but this library will not generate a compile-time error. </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> T<phrase role="special">&gt;</phrase> <anchor id="idm45394999068640-bb"/><phrase role="keyword">operator</phrase> <phrase role="identifier">old_ptr</phrase><phrase role="special">&lt;</phrase> <phrase role="identifier">T</phrase> <phrase role="special">&gt;</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Convert this object to an actual old value pointer for which the old value type <computeroutput>T</computeroutput> must be copyable. <para>For example, this is implicitly called when assigning or initializing old value pointers of type <computeroutput><computeroutput><link linkend="boost.contract.old_ptr">boost::contract::old_ptr</link></computeroutput></computeroutput>.</para><para>
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Template Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
@@ -15248,16 +15496,16 @@ In general, it is not recommended to define this macro because these compile-tim
   <phrase role="keyword">typedef</phrase> <phrase role="identifier">T</phrase> <anchor id="boost.contract.old_ptr.element_type"/><phrase role="identifier">element_type</phrase><phrase role="special">;</phrase>  <phrase role="comment">// Pointed old value type. </phrase>
 
   <phrase role="comment">// <link linkend="boost.contract.old_ptrconstruct-copy-destruct">construct/copy/destruct</link></phrase>
-  <link linkend="idm45123869905696-bb"><phrase role="identifier">old_ptr</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+  <link linkend="idm45394999038400-bb"><phrase role="identifier">old_ptr</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
 
-  <phrase role="comment">// <link linkend="idm45123869920736-bb">public member functions</link></phrase>
-  <phrase role="identifier">T</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">&amp;</phrase> <link linkend="idm45123869920176-bb"><phrase role="keyword">operator</phrase> <phrase role="special">*</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
-  <phrase role="identifier">T</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">*</phrase><phrase role="keyword">const</phrase> <link linkend="idm45123869914592-bb"><phrase role="keyword">operator</phrase><phrase role="special">-&gt;</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
-  <phrase role="keyword">explicit</phrase> <link linkend="idm45123869908992-bb"><phrase role="keyword">operator</phrase> <phrase role="keyword">bool</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
-<phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is set to point to an actual old value copy using either  <computeroutput><link linkend="BOOST_CONTRACT_OLDOF">BOOST_CONTRACT_OLDOF</link></computeroutput> or <computeroutput><link linkend="boost.contract.make_old_idm45123869837456">boost::contract::make_old</link></computeroutput> (that is why this class does not have public non-default constructors):</para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase> <phrase role="special">{</phrase>
+  <phrase role="comment">// <link linkend="idm45394999053440-bb">public member functions</link></phrase>
+  <phrase role="identifier">T</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">&amp;</phrase> <link linkend="idm45394999052880-bb"><phrase role="keyword">operator</phrase> <phrase role="special">*</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
+  <phrase role="identifier">T</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">*</phrase> <link linkend="idm45394999047296-bb"><phrase role="keyword">operator</phrase><phrase role="special">-&gt;</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
+  <phrase role="keyword">explicit</phrase> <link linkend="idm45394999041712-bb"><phrase role="keyword">operator</phrase> <phrase role="keyword">bool</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
+<phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This pointer can be set to point an actual old value copy using either  <computeroutput><link linkend="BOOST_CONTRACT_OLDOF">BOOST_CONTRACT_OLDOF</link></computeroutput> or <computeroutput><link linkend="boost.contract.make_old_idm45394998968720">boost::contract::make_old</link></computeroutput> (that is why this class does not have public non-default constructors):</para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase> <phrase role="special">{</phrase>
 <phrase role="keyword">public</phrase><phrase role="special">:</phrase>
     <phrase role="keyword">virtual</phrase> <phrase role="keyword">void</phrase> <phrase role="identifier">f</phrase><phrase role="special">(</phrase><phrase role="special">...</phrase><phrase role="special">,</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">virtual_</phrase><phrase role="special">*</phrase> <phrase role="identifier">v</phrase> <phrase role="special">=</phrase> <phrase role="number">0</phrase><phrase role="special">)</phrase> <phrase role="special">{</phrase>
-        <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">old_ptr</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">old_type</phrase><phrase role="special">&gt;</phrase> <phrase role="identifier">old_var</phrase> <phrase role="special">=</phrase>
+        <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">old_ptr</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">old_type</phrase><phrase role="special">&gt;</phrase> <phrase role="identifier">old_var</phrase> <phrase role="special">=</phrase> <phrase role="comment">// For copyable `old_type`.</phrase>
                 <phrase role="identifier">BOOST_CONTRACT_OLDOF</phrase><phrase role="special">(</phrase><phrase role="identifier">v</phrase><phrase role="special">,</phrase> <phrase role="identifier">old_expr</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
         <phrase role="special">...</phrase>
     <phrase role="special">}</phrase>
@@ -15267,17 +15515,17 @@ In general, it is not recommended to define this macro because these compile-tim
 </programlisting></para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.old_values"> Old Values</link></para>
 </para>
 
-</para><refsect2><title>Template Parameters</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">typename</phrase> T</literallayout></para><para><para>Type of the pointed old value. This type must be copyable (i.e., <computeroutput>boost::contract::is_old_value_copyable&lt;T&gt;::value</computeroutput> is <computeroutput>true</computeroutput>), otherwise this pointer will always be null and this library will generate a compile-time error when the pointer is dereferenced. </para></para></listitem></orderedlist></refsect2><refsect2><title><anchor id="boost.contract.old_ptrconstruct-copy-destruct"/><computeroutput>old_ptr</computeroutput> 
+</para><refsect2><title>Template Parameters</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">typename</phrase> T</literallayout></para><para><para>Type of the pointed old value. This type must be copyable (i.e., <computeroutput>boost::contract::is_old_value_copyable&lt;T&gt;::value</computeroutput> must be <computeroutput>true</computeroutput>), otherwise this pointer will always be null and this library will generate a compile-time error when the pointer is dereferenced. </para></para></listitem></orderedlist></refsect2><refsect2><title><anchor id="boost.contract.old_ptrconstruct-copy-destruct"/><computeroutput>old_ptr</computeroutput> 
         public
-       construct/copy/destruct</title><orderedlist><listitem><para><literallayout class="monospaced"><anchor id="idm45123869905696-bb"/><phrase role="identifier">old_ptr</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this old value pointer as null. </listitem></orderedlist></refsect2><refsect2><title><anchor id="idm45123869920736-bb"/><computeroutput>old_ptr</computeroutput> public member functions</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="identifier">T</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">&amp;</phrase> <anchor id="idm45123869920176-bb"/><phrase role="keyword">operator</phrase> <phrase role="special">*</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Dereference this old value pointer. <para>This will generate a run-time error if this pointer is null and a compile-time error if the pointed type <computeroutput>T</computeroutput> is not copyable (i.e., if <computeroutput>boost::contract::is_old_value_copyable&lt;T&gt;::value</computeroutput> is <computeroutput>false</computeroutput>).</para><para>
+       construct/copy/destruct</title><orderedlist><listitem><para><literallayout class="monospaced"><anchor id="idm45394999038400-bb"/><phrase role="identifier">old_ptr</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this old value pointer as null. </listitem></orderedlist></refsect2><refsect2><title><anchor id="idm45394999053440-bb"/><computeroutput>old_ptr</computeroutput> public member functions</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="identifier">T</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">&amp;</phrase> <anchor id="idm45394999052880-bb"/><phrase role="keyword">operator</phrase> <phrase role="special">*</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Dereference this old value pointer. <para>This will generate a run-time error if this pointer is null and a compile-time error if the pointed type <computeroutput>T</computeroutput> is not copyable (i.e., if <computeroutput>boost::contract::is_old_value_copyable&lt;T&gt;::value</computeroutput> is <computeroutput>false</computeroutput>).</para><para>
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Returns:</term><listitem><para>The pointed old value. Contract assertions should not change the state of the program so this member function is <computeroutput>const</computeroutput> and it returns the old value as a reference to a constant object (see  <link linkend="boost_contract.contract_programming_overview.constant_correctness">
-        Constant Correctness</link>). </para></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="identifier">T</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">*</phrase><phrase role="keyword">const</phrase> <anchor id="idm45123869914592-bb"/><phrase role="keyword">operator</phrase><phrase role="special">-&gt;</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Structure-dereference this old value pointer. <para>This will generate a compile-time error if the pointed type <computeroutput>T</computeroutput> is not copyable (i.e., if <computeroutput>boost::contract::is_old_value_copyable&lt;T&gt;::value</computeroutput> is <computeroutput>false</computeroutput>).</para><para>
+        Constant Correctness</link>). </para></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="identifier">T</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">*</phrase> <anchor id="idm45394999047296-bb"/><phrase role="keyword">operator</phrase><phrase role="special">-&gt;</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Structure-dereference this old value pointer. <para>This will generate a compile-time error if the pointed type <computeroutput>T</computeroutput> is not copyable (i.e., if <computeroutput>boost::contract::is_old_value_copyable&lt;T&gt;::value</computeroutput> is <computeroutput>false</computeroutput>).</para><para>
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
-        ?><varlistentry><term>Returns:</term><listitem><para>A pointer to the old value (null if this old value pointer is null). Contract assertions should not change the state of the program so this member function is <computeroutput>const</computeroutput> and it returns the old value as a constant pointer to a constant object (see  <link linkend="boost_contract.contract_programming_overview.constant_correctness">
-        Constant Correctness</link>). </para></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">explicit</phrase> <anchor id="idm45123869908992-bb"/><phrase role="keyword">operator</phrase> <phrase role="keyword">bool</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Check if this old value pointer is null or not. <para>(This is implemented using safe-bool emulation on compilers that do not support C++11 explicit type conversion operators.)</para><para>
+        ?><varlistentry><term>Returns:</term><listitem><para>A pointer to the old value (null if this old value pointer is null). Contract assertions should not change the state of the program so this member function is <computeroutput>const</computeroutput> and it returns the old value as a pointer to a constant object (see  <link linkend="boost_contract.contract_programming_overview.constant_correctness">
+        Constant Correctness</link>). </para></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">explicit</phrase> <anchor id="idm45394999041712-bb"/><phrase role="keyword">operator</phrase> <phrase role="keyword">bool</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Query if this old value pointer is null or not (safe-bool operator). <para>(This is implemented using safe-bool emulation on compilers that do not support C++11 explicit type conversion operators.)</para><para>
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Returns:</term><listitem><para>True if this pointer is not null, false otherwise. </para></listitem></varlistentry></variablelist></listitem></orderedlist></refsect2></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.old_ptr_if_copyable"><refmeta><refentrytitle>Class template old_ptr_if_copyable</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::old_ptr_if_copyable</refname><refpurpose>Old value pointer that does not require the pointed old value type to be copyable. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.old_hpp">boost/contract/old.hpp</link>&gt;
@@ -15289,14 +15537,14 @@ In general, it is not recommended to define this macro because these compile-tim
   <phrase role="keyword">typedef</phrase> <phrase role="identifier">T</phrase> <anchor id="boost.contract.old_ptr_if_copyable.element_type"/><phrase role="identifier">element_type</phrase><phrase role="special">;</phrase>  <phrase role="comment">// Pointed old value type. </phrase>
 
   <phrase role="comment">// <link linkend="boost.contract.old_ptr_if_copyableconstruct-copy-destruct">construct/copy/destruct</link></phrase>
-  <link linkend="idm45123869880480-bb"><phrase role="identifier">old_ptr_if_copyable</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
-  <link linkend="idm45123869879872-bb"><phrase role="identifier">old_ptr_if_copyable</phrase></link><phrase role="special">(</phrase><link linkend="boost.contract.old_ptr">old_ptr</link><phrase role="special">&lt;</phrase> <phrase role="identifier">T</phrase> <phrase role="special">&gt;</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
-
-  <phrase role="comment">// <link linkend="idm45123869895568-bb">public member functions</link></phrase>
-  <phrase role="identifier">T</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">&amp;</phrase> <link linkend="idm45123869895008-bb"><phrase role="keyword">operator</phrase> <phrase role="special">*</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
-  <phrase role="identifier">T</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">*</phrase><phrase role="keyword">const</phrase> <link linkend="idm45123869889408-bb"><phrase role="keyword">operator</phrase><phrase role="special">-&gt;</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
-  <phrase role="keyword">explicit</phrase> <link linkend="idm45123869883792-bb"><phrase role="keyword">operator</phrase> <phrase role="keyword">bool</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
-<phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is set to point to an actual old value copy using either  <computeroutput><link linkend="BOOST_CONTRACT_OLDOF">BOOST_CONTRACT_OLDOF</link></computeroutput> or <computeroutput><link linkend="boost.contract.make_old_idm45123869837456">boost::contract::make_old</link></computeroutput>:</para><para><programlisting><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> <phrase role="identifier">T</phrase><phrase role="special">&gt;</phrase> <phrase role="comment">// Type `T` might or not be copyable.</phrase>
+  <link linkend="idm45394999013184-bb"><phrase role="identifier">old_ptr_if_copyable</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+  <link linkend="idm45394999012576-bb"><phrase role="identifier">old_ptr_if_copyable</phrase></link><phrase role="special">(</phrase><link linkend="boost.contract.old_ptr">old_ptr</link><phrase role="special">&lt;</phrase> <phrase role="identifier">T</phrase> <phrase role="special">&gt;</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+
+  <phrase role="comment">// <link linkend="idm45394999028256-bb">public member functions</link></phrase>
+  <phrase role="identifier">T</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">&amp;</phrase> <link linkend="idm45394999027696-bb"><phrase role="keyword">operator</phrase> <phrase role="special">*</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
+  <phrase role="identifier">T</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">*</phrase> <link linkend="idm45394999022096-bb"><phrase role="keyword">operator</phrase><phrase role="special">-&gt;</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
+  <phrase role="keyword">explicit</phrase> <link linkend="idm45394999016496-bb"><phrase role="keyword">operator</phrase> <phrase role="keyword">bool</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
+<phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This pointer can be set to point to an actual old value copy using either  <computeroutput><link linkend="BOOST_CONTRACT_OLDOF">BOOST_CONTRACT_OLDOF</link></computeroutput> or <computeroutput><link linkend="boost.contract.make_old_idm45394998968720">boost::contract::make_old</link></computeroutput>:</para><para><programlisting><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> <phrase role="identifier">T</phrase><phrase role="special">&gt;</phrase> <phrase role="comment">// Type `T` might or not be copyable.</phrase>
 <phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase> <phrase role="special">{</phrase>
 <phrase role="keyword">public</phrase><phrase role="special">:</phrase>
     <phrase role="keyword">virtual</phrase> <phrase role="keyword">void</phrase> <phrase role="identifier">f</phrase><phrase role="special">(</phrase><phrase role="special">...</phrase><phrase role="special">,</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">virtual_</phrase><phrase role="special">*</phrase> <phrase role="identifier">v</phrase> <phrase role="special">=</phrase> <phrase role="number">0</phrase><phrase role="special">)</phrase> <phrase role="special">{</phrase>
@@ -15315,20 +15563,20 @@ In general, it is not recommended to define this macro because these compile-tim
 
 </para><refsect2><title>Template Parameters</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">typename</phrase> T</literallayout></para><para><para>Type of the pointed old value. If this type is not copyable (i.e., <computeroutput>boost::contract::is_old_value_copyable&lt;T&gt;::value</computeroutput> is <computeroutput>false</computeroutput>), this pointer will always be null (but this library will not generate a compile-time error when this pointer is dereferenced). </para></para></listitem></orderedlist></refsect2><refsect2><title><anchor id="boost.contract.old_ptr_if_copyableconstruct-copy-destruct"/><computeroutput>old_ptr_if_copyable</computeroutput> 
         public
-       construct/copy/destruct</title><orderedlist><listitem><para><literallayout class="monospaced"><anchor id="idm45123869880480-bb"/><phrase role="identifier">old_ptr_if_copyable</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this old value pointer as null. </listitem><listitem><para><literallayout class="monospaced"><anchor id="idm45123869879872-bb"/><phrase role="identifier">old_ptr_if_copyable</phrase><phrase role="special">(</phrase><link linkend="boost.contract.old_ptr">old_ptr</link><phrase role="special">&lt;</phrase> <phrase role="identifier">T</phrase> <phrase role="special">&gt;</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> other<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this old value pointer from an old value pointer that requires the old value type to be copyable. <para>This constructor is implicitly called by this library when assigning an object of this type using <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_OLDOF">BOOST_CONTRACT_OLDOF</link></computeroutput></computeroutput> (this constructor is usually not explicitly called by user code).</para><para>
+       construct/copy/destruct</title><orderedlist><listitem><para><literallayout class="monospaced"><anchor id="idm45394999013184-bb"/><phrase role="identifier">old_ptr_if_copyable</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this old value pointer as null. </listitem><listitem><para><literallayout class="monospaced"><anchor id="idm45394999012576-bb"/><phrase role="identifier">old_ptr_if_copyable</phrase><phrase role="special">(</phrase><link linkend="boost.contract.old_ptr">old_ptr</link><phrase role="special">&lt;</phrase> <phrase role="identifier">T</phrase> <phrase role="special">&gt;</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> other<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this old value pointer from an old value pointer that requires the old value type to be copyable. <para>Ownership of the pointed value object is transferred to this pointer. This constructor is implicitly called by this library when assigning an object of this type using <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_OLDOF">BOOST_CONTRACT_OLDOF</link></computeroutput></computeroutput> (this constructor is usually not explicitly called by user code).</para><para>
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>other</computeroutput></term><listitem><para>Old value pointer that requires the old value type to be copyable. </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></listitem></orderedlist></refsect2><refsect2><title><anchor id="idm45123869895568-bb"/><computeroutput>old_ptr_if_copyable</computeroutput> public member functions</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="identifier">T</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">&amp;</phrase> <anchor id="idm45123869895008-bb"/><phrase role="keyword">operator</phrase> <phrase role="special">*</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Dereference this old value pointer. <para>This will generate a run-time error if this pointer is null, but no compile-time error is generated if the pointed type <computeroutput>T</computeroutput> is not copyable (i.e., if <computeroutput>boost::contract::is_old_value_copyable&lt;T&gt;::value</computeroutput> is <computeroutput>false</computeroutput>).</para><para>
+                ?><varlistentry><term><computeroutput>other</computeroutput></term><listitem><para>Old value pointer that requires the old value type to be copyable. </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></listitem></orderedlist></refsect2><refsect2><title><anchor id="idm45394999028256-bb"/><computeroutput>old_ptr_if_copyable</computeroutput> public member functions</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="identifier">T</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">&amp;</phrase> <anchor id="idm45394999027696-bb"/><phrase role="keyword">operator</phrase> <phrase role="special">*</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Dereference this old value pointer. <para>This will generate a run-time error if this pointer is null, but no compile-time error is generated if the pointed type <computeroutput>T</computeroutput> is not copyable (i.e., if <computeroutput>boost::contract::is_old_value_copyable&lt;T&gt;::value</computeroutput> is <computeroutput>false</computeroutput>).</para><para>
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Returns:</term><listitem><para>The pointed old value. Contract assertions should not change the state of the program so this member function is <computeroutput>const</computeroutput> and it returns the old value as a reference to a constant object (see  <link linkend="boost_contract.contract_programming_overview.constant_correctness">
-        Constant Correctness</link>). </para></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="identifier">T</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">*</phrase><phrase role="keyword">const</phrase> <anchor id="idm45123869889408-bb"/><phrase role="keyword">operator</phrase><phrase role="special">-&gt;</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Structure-dereference this old value pointer. <para>This will return null but will not generate a compile-time error if the pointed type <computeroutput>T</computeroutput> is not copyable (i.e., if <computeroutput>boost::contract::is_old_value_copyable&lt;T&gt;::value</computeroutput> is <computeroutput>false</computeroutput>).</para><para>
+        Constant Correctness</link>). </para></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="identifier">T</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">*</phrase> <anchor id="idm45394999022096-bb"/><phrase role="keyword">operator</phrase><phrase role="special">-&gt;</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Structure-dereference this old value pointer. <para>This will return null but will not generate a compile-time error if the pointed type <computeroutput>T</computeroutput> is not copyable (i.e., if <computeroutput>boost::contract::is_old_value_copyable&lt;T&gt;::value</computeroutput> is <computeroutput>false</computeroutput>).</para><para>
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
-        ?><varlistentry><term>Returns:</term><listitem><para>A pointer to the old value (null if this old value pointer is null). Contract assertions should not change the state of the program so this member function is <computeroutput>const</computeroutput> and it returns the old value as a constant pointer to a constant object (see  <link linkend="boost_contract.contract_programming_overview.constant_correctness">
-        Constant Correctness</link>). </para></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">explicit</phrase> <anchor id="idm45123869883792-bb"/><phrase role="keyword">operator</phrase> <phrase role="keyword">bool</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Check if this old value pointer is null or not (safe-bool operator). <para>(This is implemented using safe-bool emulation on compilers that do not support C++11 explicit type conversion operators.)</para><para>
+        ?><varlistentry><term>Returns:</term><listitem><para>A pointer to the old value (null if this old value pointer is null). Contract assertions should not change the state of the program so this member function is <computeroutput>const</computeroutput> and it returns the old value as a pointer to a constant object (see  <link linkend="boost_contract.contract_programming_overview.constant_correctness">
+        Constant Correctness</link>). </para></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">explicit</phrase> <anchor id="idm45394999016496-bb"/><phrase role="keyword">operator</phrase> <phrase role="keyword">bool</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Query if this old value pointer is null or not (safe-bool operator). <para>(This is implemented using safe-bool emulation on compilers that do not support C++11 explicit type conversion operators.)</para><para>
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Returns:</term><listitem><para>True if this pointer is not null, false otherwise. </para></listitem></varlistentry></variablelist></listitem></orderedlist></refsect2></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.old_value"><refmeta><refentrytitle>Class old_value</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::old_value</refname><refpurpose>Convert user-specified expressions to old values. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.old_hpp">boost/contract/old.hpp</link>&gt;
@@ -15338,19 +15586,19 @@ In general, it is not recommended to define this macro because these compile-tim
 <phrase role="keyword">public</phrase><phrase role="special">:</phrase>
   <phrase role="comment">// <link linkend="boost.contract.old_valueconstruct-copy-destruct">construct/copy/destruct</link></phrase>
   <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> T<phrase role="special">&gt;</phrase> 
-    <link linkend="idm45123869870608-bb"><phrase role="identifier">old_value</phrase></link><phrase role="special">(</phrase><phrase role="identifier">T</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">,</phrase> 
+    <link linkend="idm45394999003184-bb"><phrase role="identifier">old_value</phrase></link><phrase role="special">(</phrase><phrase role="identifier">T</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">,</phrase> 
               <phrase role="keyword">typename</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">enable_if</phrase><phrase role="special">&lt;</phrase> <link linkend="boost.contract.is_old_value_copyable">boost::contract::is_old_value_copyable</link><phrase role="special">&lt;</phrase> <phrase role="identifier">T</phrase> <phrase role="special">&gt;</phrase> <phrase role="special">&gt;</phrase><phrase role="special">::</phrase><phrase role="identifier">type</phrase> <phrase role="special">*</phrase> <phrase role="special">=</phrase> <phrase role="number">0</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
   <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> T<phrase role="special">&gt;</phrase> 
-    <link linkend="idm45123869863520-bb"><phrase role="identifier">old_value</phrase></link><phrase role="special">(</phrase><phrase role="identifier">T</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">,</phrase> 
+    <link linkend="idm45394998995648-bb"><phrase role="identifier">old_value</phrase></link><phrase role="special">(</phrase><phrase role="identifier">T</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">,</phrase> 
               <phrase role="keyword">typename</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">disable_if</phrase><phrase role="special">&lt;</phrase> <link linkend="boost.contract.is_old_value_copyable">boost::contract::is_old_value_copyable</link><phrase role="special">&lt;</phrase> <phrase role="identifier">T</phrase> <phrase role="special">&gt;</phrase> <phrase role="special">&gt;</phrase><phrase role="special">::</phrase><phrase role="identifier">type</phrase> <phrase role="special">*</phrase> <phrase role="special">=</phrase> <phrase role="number">0</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
-<phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This class is often only implicitly used by this library and it does not explicitly appear in user code.</para><para>On older compilers that cannot correctly deduce the <computeroutput><link linkend="boost.contract.is_old_value_copyable">boost::contract::is_old_value_copyable</link></computeroutput> trait, programmers can manually specialize that trait to make sure that only old value types that are copyable are actually copied.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.extras.old_value_requirements__templates_">
+<phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This class is usually only implicitly used by this library and it does not explicitly appear in user code.</para><para>On older compilers that cannot correctly deduce the <computeroutput><link linkend="boost.contract.is_old_value_copyable">boost::contract::is_old_value_copyable</link></computeroutput> trait used in the declaration of this class, programmers can manually specialize that trait to make sure that only old value types that are copyable are actually copied.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.extras.old_value_requirements__templates_">
         Old Value Requirements</link> </para>
 </para>
 </para><refsect2><title><anchor id="boost.contract.old_valueconstruct-copy-destruct"/><computeroutput>old_value</computeroutput> 
         public
        construct/copy/destruct</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> T<phrase role="special">&gt;</phrase> 
-  <anchor id="idm45123869870608-bb"/><phrase role="identifier">old_value</phrase><phrase role="special">(</phrase><phrase role="identifier">T</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> old<phrase role="special">,</phrase> 
-            <phrase role="keyword">typename</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">enable_if</phrase><phrase role="special">&lt;</phrase> <link linkend="boost.contract.is_old_value_copyable">boost::contract::is_old_value_copyable</link><phrase role="special">&lt;</phrase> <phrase role="identifier">T</phrase> <phrase role="special">&gt;</phrase> <phrase role="special">&gt;</phrase><phrase role="special">::</phrase><phrase role="identifier">type</phrase> <phrase role="special">*</phrase> <phrase role="special">=</phrase> <phrase role="number">0</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this object from the specified old value when the old value type is copy constructible. <para>The specified old value is copied (one time only) using <computeroutput><computeroutput><link linkend="boost.contract.old_value_copy">boost::contract::old_value_copy</link></computeroutput></computeroutput>, in which case related old value pointer will not be null (no copy is made if postconditions and exception guarantees are not being checked, see <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_NO_OLDS">BOOST_CONTRACT_NO_OLDS</link></computeroutput></computeroutput>).</para><para>
+  <anchor id="idm45394999003184-bb"/><phrase role="identifier">old_value</phrase><phrase role="special">(</phrase><phrase role="identifier">T</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> old<phrase role="special">,</phrase> 
+            <phrase role="keyword">typename</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">enable_if</phrase><phrase role="special">&lt;</phrase> <link linkend="boost.contract.is_old_value_copyable">boost::contract::is_old_value_copyable</link><phrase role="special">&lt;</phrase> <phrase role="identifier">T</phrase> <phrase role="special">&gt;</phrase> <phrase role="special">&gt;</phrase><phrase role="special">::</phrase><phrase role="identifier">type</phrase> <phrase role="special">*</phrase> <phrase role="special">=</phrase> <phrase role="number">0</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this object from the specified old value when the old value type is copy constructible. <para>The specified old value <computeroutput>old</computeroutput> is copied (one time only) using <computeroutput><computeroutput><link linkend="boost.contract.old_value_copy">boost::contract::old_value_copy</link></computeroutput></computeroutput>, in which case the related old value pointer will not be null (but no copy is made if postconditions and exception guarantees are not being checked, see  <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_NO_OLDS">BOOST_CONTRACT_NO_OLDS</link></computeroutput></computeroutput>).</para><para>
 
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
@@ -15359,8 +15607,8 @@ In general, it is not recommended to define this macro because these compile-tim
                 ?><varlistentry><term><computeroutput>old</computeroutput></term><listitem><para>Old value to be copied.</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Template Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
                 ?><varlistentry><term><computeroutput>T</computeroutput></term><listitem><para>Old value type. </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></listitem><listitem><para><literallayout class="monospaced"><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> T<phrase role="special">&gt;</phrase> 
-  <anchor id="idm45123869863520-bb"/><phrase role="identifier">old_value</phrase><phrase role="special">(</phrase><phrase role="identifier">T</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> old<phrase role="special">,</phrase> 
-            <phrase role="keyword">typename</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">disable_if</phrase><phrase role="special">&lt;</phrase> <link linkend="boost.contract.is_old_value_copyable">boost::contract::is_old_value_copyable</link><phrase role="special">&lt;</phrase> <phrase role="identifier">T</phrase> <phrase role="special">&gt;</phrase> <phrase role="special">&gt;</phrase><phrase role="special">::</phrase><phrase role="identifier">type</phrase> <phrase role="special">*</phrase> <phrase role="special">=</phrase> <phrase role="number">0</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this object from the specified old value when the old value type is not copyable. <para>The specified old value cannot be copied in this case so it is not copied and the related old value pointer will always be null (thus a call to this constructor has no effect and it will likely be optimized away by most compilers).</para><para>
+  <anchor id="idm45394998995648-bb"/><phrase role="identifier">old_value</phrase><phrase role="special">(</phrase><phrase role="identifier">T</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> old<phrase role="special">,</phrase> 
+            <phrase role="keyword">typename</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">disable_if</phrase><phrase role="special">&lt;</phrase> <link linkend="boost.contract.is_old_value_copyable">boost::contract::is_old_value_copyable</link><phrase role="special">&lt;</phrase> <phrase role="identifier">T</phrase> <phrase role="special">&gt;</phrase> <phrase role="special">&gt;</phrase><phrase role="special">::</phrase><phrase role="identifier">type</phrase> <phrase role="special">*</phrase> <phrase role="special">=</phrase> <phrase role="number">0</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this object from the specified old value when the old value type is not copyable. <para>The specified old value <computeroutput>old</computeroutput> cannot be copied in this case so it is not copied and the related old value pointer will always be null (thus calls to this constructor have no effect and they will likely be optimized away by most compilers).</para><para>
 
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
@@ -15373,15 +15621,15 @@ In general, it is not recommended to define this macro because these compile-tim
 </phrase><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> T<phrase role="special">&gt;</phrase> 
 <phrase role="keyword">struct</phrase> <link linkend="boost.contract.old_value_copy">old_value_copy</link> <phrase role="special">{</phrase>
   <phrase role="comment">// <link linkend="boost.contract.old_value_copyconstruct-copy-destruct">construct/copy/destruct</link></phrase>
-  <phrase role="keyword">explicit</phrase> <link linkend="idm45123869845760-bb"><phrase role="identifier">old_value_copy</phrase></link><phrase role="special">(</phrase><phrase role="identifier">T</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+  <phrase role="keyword">explicit</phrase> <link linkend="idm45394998977872-bb"><phrase role="identifier">old_value_copy</phrase></link><phrase role="special">(</phrase><phrase role="identifier">T</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
 
-  <phrase role="comment">// <link linkend="idm45123869849648-bb">public member functions</link></phrase>
-  <phrase role="identifier">T</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">&amp;</phrase> <link linkend="idm45123869849088-bb"><phrase role="identifier">old</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
-<phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>By default, the implementation of this trait uses <computeroutput>T's</computeroutput> copy constructor to make one single copy of the specified <computeroutput>value</computeroutput>. However, programmers can specialize this trait to copy old values using user-specific operations different from <computeroutput>T's</computeroutput> copy constructor. The default implementation of this trait is equivalent to:</para><para><programlisting><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> <phrase role="identifier">T</phrase><phrase role="special">&gt;</phrase>
+  <phrase role="comment">// <link linkend="idm45394998981760-bb">public member functions</link></phrase>
+  <phrase role="identifier">T</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">&amp;</phrase> <link linkend="idm45394998981200-bb"><phrase role="identifier">old</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase>
+<phrase role="special">}</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>By default, the implementation of this trait uses <computeroutput>T's</computeroutput> copy constructor to make one single copy of the specified value. However, programmers can specialize this trait to copy old values using user-specific operations different from <computeroutput>T's</computeroutput> copy constructor. The default implementation of this trait is equivalent to:</para><para><programlisting><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> <phrase role="identifier">T</phrase><phrase role="special">&gt;</phrase>
 <phrase role="keyword">class</phrase> <phrase role="identifier">old_value_copy</phrase> <phrase role="special">{</phrase>
 <phrase role="keyword">public</phrase><phrase role="special">:</phrase>
     <phrase role="keyword">explicit</phrase> <phrase role="identifier">old_value_copy</phrase><phrase role="special">(</phrase><phrase role="identifier">T</phrase> <phrase role="keyword">const</phrase><phrase role="special">&amp;</phrase> <phrase role="identifier">old</phrase><phrase role="special">)</phrase> <phrase role="special">:</phrase>
-        <phrase role="identifier">old_</phrase><phrase role="special">(</phrase><phrase role="identifier">value</phrase><phrase role="special">)</phrase> <phrase role="comment">// One single copy of value using T's copy constructor.</phrase>
+        <phrase role="identifier">old_</phrase><phrase role="special">(</phrase><phrase role="identifier">old</phrase><phrase role="special">)</phrase> <phrase role="comment">// One single copy of value using T's copy constructor.</phrase>
     <phrase role="special">{</phrase><phrase role="special">}</phrase>
 
     <phrase role="identifier">T</phrase> <phrase role="keyword">const</phrase><phrase role="special">&amp;</phrase> <phrase role="identifier">old</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase> <phrase role="special">{</phrase> <phrase role="keyword">return</phrase> <phrase role="identifier">old_</phrase><phrase role="special">;</phrase> <phrase role="special">}</phrase>
@@ -15394,24 +15642,24 @@ In general, it is not recommended to define this macro because these compile-tim
 </para>
 </para><refsect2><title><anchor id="boost.contract.old_value_copyconstruct-copy-destruct"/><computeroutput>old_value_copy</computeroutput> 
         public
-       construct/copy/destruct</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">explicit</phrase> <anchor id="idm45123869845760-bb"/><phrase role="identifier">old_value_copy</phrase><phrase role="special">(</phrase><phrase role="identifier">T</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> old<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this object by making one single copy of the specified old value. <para>This is the only operation within this library that actually copies old values. This ensures this library makes one and only one copy of old values (if they actually need to be copied).</para><para>
+       construct/copy/destruct</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="keyword">explicit</phrase> <anchor id="idm45394998977872-bb"/><phrase role="identifier">old_value_copy</phrase><phrase role="special">(</phrase><phrase role="identifier">T</phrase> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> old<phrase role="special">)</phrase><phrase role="special">;</phrase></literallayout></para>Construct this object by making one single copy of the specified old value. <para>This is the only operation within this library that actually copies old values. This ensures this library makes one and only one copy of an old value (if they actually need to be copied, see <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_NO_OLDS">BOOST_CONTRACT_NO_OLDS</link></computeroutput></computeroutput>).</para><para>
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>old</computeroutput></term><listitem><para>The old value to copy. </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></listitem></orderedlist></refsect2><refsect2><title><anchor id="idm45123869849648-bb"/><computeroutput>old_value_copy</computeroutput> public member functions</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="identifier">T</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">&amp;</phrase> <anchor id="idm45123869849088-bb"/><phrase role="identifier">old</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Return a (constant) reference to the old value that was copied. <para>Contract assertions should not change the state of the program so the old value copy is returned as <computeroutput>const</computeroutput> (see  <link linkend="boost_contract.contract_programming_overview.constant_correctness">
-Constant Correctness</link>). </para></listitem></orderedlist></refsect2></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.null_old"><refmeta><refentrytitle>Function null_old</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::null_old</refname><refpurpose>Return a null old value. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.old_hpp">boost/contract/old.hpp</link>&gt;
+                ?><varlistentry><term><computeroutput>old</computeroutput></term><listitem><para>The old value to copy. </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></listitem></orderedlist></refsect2><refsect2><title><anchor id="idm45394998981760-bb"/><computeroutput>old_value_copy</computeroutput> public member functions</title><orderedlist><listitem><para><literallayout class="monospaced"><phrase role="identifier">T</phrase> <phrase role="keyword">const</phrase>  <phrase role="special">&amp;</phrase> <anchor id="idm45394998981200-bb"/><phrase role="identifier">old</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase><phrase role="special">;</phrase></literallayout></para>Return a (constant) reference to the old value that was copied. <para>Contract assertions should not change the state of the program so the old value copy is returned as <computeroutput>const</computeroutput> (see  <link linkend="boost_contract.contract_programming_overview.constant_correctness">
+Constant Correctness</link>). </para></listitem></orderedlist></refsect2></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.null_old"><refmeta><refentrytitle>Function null_old</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::null_old</refname><refpurpose>Return a "null" old value. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.old_hpp">boost/contract/old.hpp</link>&gt;
 
 </phrase>
-<link linkend="boost.contract.old_value">old_value</link> <phrase role="identifier">null_old</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>The related old value pointer will also be null. This function is often only used by the code expanded by  <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_OLDOF">BOOST_CONTRACT_OLDOF</link></computeroutput></computeroutput>.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.extras.no_macros__and_no_variadic_macros_"> No Macros</link></para>
+<link linkend="boost.contract.old_value">old_value</link> <phrase role="identifier">null_old</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>The related old value pointer will also be null. This function is usually only called by the code expanded by  <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_OLDOF">BOOST_CONTRACT_OLDOF</link></computeroutput></computeroutput>.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.extras.no_macros__and_no_variadic_macros_"> No Macros</link></para>
 </para>
 
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
-        ?><varlistentry><term>Returns:</term><listitem><para>Null old value. </para></listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.make_old_idm45123869837456"><refmeta><refentrytitle>Function make_old</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::make_old</refname><refpurpose>Make an old value pointer (but not for virtual public functions and public functions overrides). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.old_hpp">boost/contract/old.hpp</link>&gt;
+        ?><varlistentry><term>Returns:</term><listitem><para>Null old value. </para></listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.make_old_idm45394998968720"><refmeta><refentrytitle>Function make_old</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::make_old</refname><refpurpose>Make an old value pointer (but not for virtual public functions and public functions overrides). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.old_hpp">boost/contract/old.hpp</link>&gt;
 
 </phrase>
-<link linkend="boost.contract.old_pointer">old_pointer</link> <phrase role="identifier">make_old</phrase><phrase role="special">(</phrase><link linkend="boost.contract.old_value">old_value</link> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> old<phrase role="special">)</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>The related old value pointer will not be null if the specified old value was actually copied. This function is often only used by code expanded by <computeroutput>BOOST_CONTRACT_OLDOF(old_expr)</computeroutput>:</para><para><programlisting><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">make_old</phrase><phrase role="special">(</phrase><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">copy_old</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="special">?</phrase> <phrase role="identifier">old_expr</phrase> <phrase role="special">:</phrase>
+<link linkend="boost.contract.old_pointer">old_pointer</link> <phrase role="identifier">make_old</phrase><phrase role="special">(</phrase><link linkend="boost.contract.old_value">old_value</link> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> old<phrase role="special">)</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>The related old value pointer will not be null if the specified old value was actually copied. This function is usually only called by code expanded by <computeroutput>BOOST_CONTRACT_OLDOF(old_expr)</computeroutput> as in:</para><para><programlisting><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">make_old</phrase><phrase role="special">(</phrase><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">copy_old</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="special">?</phrase> <phrase role="identifier">old_expr</phrase> <phrase role="special">:</phrase>
         <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">null_old</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">)</phrase>
 </programlisting></para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.extras.no_macros__and_no_variadic_macros_"> No Macros</link></para>
 </para>
@@ -15421,10 +15669,10 @@ Constant Correctness</link>). </para></listitem></orderedlist></refsect2></refse
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>old</computeroutput></term><listitem><para>Old value which is usually implicitly constructed from the user old value expression to be copied (use the ternary operator <computeroutput>?:</computeroutput> to avoid evaluating the old value expression all together when <computeroutput>boost::contract::copy_old()</computeroutput> is <computeroutput>false</computeroutput>).</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>Old value pointer (usually implicitly converted to either  <computeroutput><link linkend="boost.contract.old_ptr">boost::contract::old_ptr</link></computeroutput> or  <computeroutput><link linkend="boost.contract.old_ptr_if_copyable">boost::contract::old_ptr_if_copyable</link></computeroutput> in user code). </para></listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.make_old_idm45123869826992"><refmeta><refentrytitle>Function make_old</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::make_old</refname><refpurpose>Make an old value pointer (for virtual public functions and public functions overrides). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.old_hpp">boost/contract/old.hpp</link>&gt;
+                ?><varlistentry><term><computeroutput>old</computeroutput></term><listitem><para>Old value which is usually implicitly constructed from the user old value expression to be copied (use the ternary operator <computeroutput>?:</computeroutput> to completely avoid to evaluate the old value expression when <computeroutput>boost::contract::copy_old()</computeroutput> is <computeroutput>false</computeroutput>).</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>Old value pointer (usually implicitly converted to either  <computeroutput><link linkend="boost.contract.old_ptr">boost::contract::old_ptr</link></computeroutput> or  <computeroutput><link linkend="boost.contract.old_ptr_if_copyable">boost::contract::old_ptr_if_copyable</link></computeroutput> in user code). </para></listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.make_old_idm45394998958240"><refmeta><refentrytitle>Function make_old</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::make_old</refname><refpurpose>Make an old value pointer (for virtual public functions and public functions overrides). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.old_hpp">boost/contract/old.hpp</link>&gt;
 
 </phrase>
-<link linkend="boost.contract.old_pointer">old_pointer</link> <phrase role="identifier">make_old</phrase><phrase role="special">(</phrase><link linkend="boost.contract.virtual_">virtual_</link> <phrase role="special">*</phrase> v<phrase role="special">,</phrase> <link linkend="boost.contract.old_value">old_value</link> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> old<phrase role="special">)</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>The related old value pointer will not be null if the specified old value was actually copied. This function is often only used by code expanded by <computeroutput>BOOST_CONTRACT_OLDOF(v, old_expr)</computeroutput>:</para><para><programlisting><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">make_old</phrase><phrase role="special">(</phrase><phrase role="identifier">v</phrase><phrase role="special">,</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">copy_old</phrase><phrase role="special">(</phrase><phrase role="identifier">v</phrase><phrase role="special">)</phrase> <phrase role="special">?</phrase> <phrase role="identifier">old_expr</phrase> <phrase role="special">:</phrase>
+<link linkend="boost.contract.old_pointer">old_pointer</link> <phrase role="identifier">make_old</phrase><phrase role="special">(</phrase><link linkend="boost.contract.virtual_">virtual_</link> <phrase role="special">*</phrase> v<phrase role="special">,</phrase> <link linkend="boost.contract.old_value">old_value</link> <phrase role="keyword">const</phrase> <phrase role="special">&amp;</phrase> old<phrase role="special">)</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>The related old value pointer will not be null if the specified old value was actually copied. This function is usually only called by code expanded by <computeroutput>BOOST_CONTRACT_OLDOF(v, old_expr)</computeroutput> as in:</para><para><programlisting><phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">make_old</phrase><phrase role="special">(</phrase><phrase role="identifier">v</phrase><phrase role="special">,</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">copy_old</phrase><phrase role="special">(</phrase><phrase role="identifier">v</phrase><phrase role="special">)</phrase> <phrase role="special">?</phrase> <phrase role="identifier">old_expr</phrase> <phrase role="special">:</phrase>
         <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">null_old</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">)</phrase>
 </programlisting></para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.extras.no_macros__and_no_variadic_macros_"> No Macros</link></para>
 </para>
@@ -15434,18 +15682,18 @@ Constant Correctness</link>). </para></listitem></orderedlist></refsect2></refse
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>old</computeroutput></term><listitem><para>Old value which is usually implicitly constructed from the user old value expression to be copied (use the ternary operator <computeroutput>?:</computeroutput> to avoid evaluating the old value expression all together when <computeroutput>boost::contract::copy_old(v)</computeroutput> is <computeroutput>false</computeroutput>).</para></listitem></varlistentry><varlistentry><term><computeroutput>v</computeroutput></term><listitem><para>The trailing parameter of type  <computeroutput><computeroutput><link linkend="boost.contract.virtual_">boost::contract::virtual_</link></computeroutput></computeroutput><computeroutput>*</computeroutput> and default value <computeroutput>0</computeroutput> from the enclosing virtual or overriding public function declaring the contract. </para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>Old value pointer (usually implicitly converted to either  <computeroutput><link linkend="boost.contract.old_ptr">boost::contract::old_ptr</link></computeroutput> or  <computeroutput><link linkend="boost.contract.old_ptr_if_copyable">boost::contract::old_ptr_if_copyable</link></computeroutput> in user code). </para></listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.copy_old_idm45123869813440"><refmeta><refentrytitle>Function copy_old</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::copy_old</refname><refpurpose>Check if old values need to be copied (but not for virtual public functions and public function overrides). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.old_hpp">boost/contract/old.hpp</link>&gt;
+                ?><varlistentry><term><computeroutput>old</computeroutput></term><listitem><para>Old value which is usually implicitly constructed from the user old value expression to be copied (use the ternary operator <computeroutput>?:</computeroutput> to completely avoid to evaluate the old value expression when <computeroutput>boost::contract::copy_old(v)</computeroutput> is <computeroutput>false</computeroutput>).</para></listitem></varlistentry><varlistentry><term><computeroutput>v</computeroutput></term><listitem><para>The trailing parameter of type  <computeroutput><computeroutput><link linkend="boost.contract.virtual_">boost::contract::virtual_</link></computeroutput></computeroutput><computeroutput>*</computeroutput> and default value <computeroutput>0</computeroutput> from the enclosing virtual or overriding public function declaring the contract. </para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>Old value pointer (usually implicitly converted to either  <computeroutput><link linkend="boost.contract.old_ptr">boost::contract::old_ptr</link></computeroutput> or  <computeroutput><link linkend="boost.contract.old_ptr_if_copyable">boost::contract::old_ptr_if_copyable</link></computeroutput> in user code). </para></listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.copy_old_idm45394998944672"><refmeta><refentrytitle>Function copy_old</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::copy_old</refname><refpurpose>Query if old values need to be copied (but not for virtual public functions and public function overrides). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.old_hpp">boost/contract/old.hpp</link>&gt;
 
 </phrase>
-<phrase role="keyword">bool</phrase> <phrase role="identifier">copy_old</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>For example, this function always returns false when both postconditions and exception guarantees are not being checked (see  <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_NO_OLDS">BOOST_CONTRACT_NO_OLDS</link></computeroutput></computeroutput>). This function is often only used by the code expanded by  <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_OLDOF">BOOST_CONTRACT_OLDOF</link></computeroutput></computeroutput>.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.extras.no_macros__and_no_variadic_macros_"> No Macros</link></para>
+<phrase role="keyword">bool</phrase> <phrase role="identifier">copy_old</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>For example, this function always returns false when both postconditions and exception guarantees are not being checked (see  <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_NO_OLDS">BOOST_CONTRACT_NO_OLDS</link></computeroutput></computeroutput>). This function is usually only called by the code expanded by  <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_OLDOF">BOOST_CONTRACT_OLDOF</link></computeroutput></computeroutput>.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.extras.no_macros__and_no_variadic_macros_"> No Macros</link></para>
 </para>
 
 </para><variablelist spacing="compact"><?dbhtml 
           list-presentation="table"
-        ?><varlistentry><term>Returns:</term><listitem><para>True if old values need to be copied, false otherwise. </para></listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.copy_old_idm45123869807296"><refmeta><refentrytitle>Function copy_old</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::copy_old</refname><refpurpose>Check if old values need to be copied (for virtual public functions and public function overrides). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.old_hpp">boost/contract/old.hpp</link>&gt;
+        ?><varlistentry><term>Returns:</term><listitem><para>True if old values need to be copied, false otherwise. </para></listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.copy_old_idm45394998938528"><refmeta><refentrytitle>Function copy_old</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::copy_old</refname><refpurpose>Query if old values need to be copied (for virtual public functions and public function overrides). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.old_hpp">boost/contract/old.hpp</link>&gt;
 
 </phrase>
-<phrase role="keyword">bool</phrase> <phrase role="identifier">copy_old</phrase><phrase role="special">(</phrase><link linkend="boost.contract.virtual_">virtual_</link> <phrase role="special">*</phrase> v<phrase role="special">)</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>For example, this function always returns false when both postconditions and exception guarantees are not being checked (see  <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_NO_OLDS">BOOST_CONTRACT_NO_OLDS</link></computeroutput></computeroutput>). In addition, this function returns false when overridden functions are being called subsequent times by this library to support subcontracting. This function is often only used by the code expanded by  <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_OLDOF">BOOST_CONTRACT_OLDOF</link></computeroutput></computeroutput>.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.extras.no_macros__and_no_variadic_macros_"> No Macros</link></para>
+<phrase role="keyword">bool</phrase> <phrase role="identifier">copy_old</phrase><phrase role="special">(</phrase><link linkend="boost.contract.virtual_">virtual_</link> <phrase role="special">*</phrase> v<phrase role="special">)</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>For example, this function always returns false when both postconditions and exception guarantees are not being checked (see  <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_NO_OLDS">BOOST_CONTRACT_NO_OLDS</link></computeroutput></computeroutput>). In addition, this function returns false when overridden functions are being called subsequent times by this library to support subcontracting. This function is usually only called by the code expanded by  <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_OLDOF">BOOST_CONTRACT_OLDOF</link></computeroutput></computeroutput>.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.extras.no_macros__and_no_variadic_macros_"> No Macros</link></para>
 </para>
 
 
@@ -15461,7 +15709,7 @@ Constant Correctness</link>). </para></listitem></orderedlist></refsect2></refse
 </programlisting></para><para>Where:</para><para><itemizedlist>
 <listitem><para><computeroutput><emphasis role="bold">v</emphasis></computeroutput> is the extra parameter of type  <computeroutput><link linkend="boost.contract.virtual_">boost::contract::virtual_</link></computeroutput><computeroutput>*</computeroutput> and default value <computeroutput>0</computeroutput> from the enclosing virtual public function or public function overrides declaring the contract. </para>
 </listitem>
-<listitem><para><computeroutput><emphasis role="bold">old_expr</emphasis></computeroutput> is the expression to be evaluated and copied to the old value pointer. (This is not a variadic macro parameter so any comma it might contain must be protected by round parenthesis, <computeroutput>BOOST_CONTRACT_OLDOF(v, (old_expr))</computeroutput> will always work.)</para>
+<listitem><para><computeroutput><emphasis role="bold">old_expr</emphasis></computeroutput> is the expression to be evaluated and copied into the old value pointer. (This is not a variadic macro parameter so any comma it might contain must be protected by round parenthesis and <computeroutput>BOOST_CONTRACT_OLDOF(v, (old_expr))</computeroutput> will always work.)</para>
 </listitem>
 </itemizedlist>
 On compilers that do not support variadic macros, programmers can manually copy old value expressions without using this macro (see  <link linkend="boost_contract.extras.no_macros__and_no_variadic_macros_"> No Macros</link>).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.old_values"> Old Values</link> </para>
@@ -15470,23 +15718,23 @@ On compilers that do not support variadic macros, programmers can manually copy
 </section>
 <section id="header.boost.contract.override_hpp"><title>Header &lt;<ulink url="../../../../boost/contract/override.hpp">boost/contract/override.hpp</ulink>&gt;</title><para>Handle public function overrides (for subcontracting). </para><synopsis xmlns:xi="http://www.w3.org/2001/XInclude">
 
-<link linkend="BOOST_CO_idm45123869781472">BOOST_CONTRACT_NAMED_OVERRIDE</link>(type_name, func_name)
+<link linkend="BOOST_CO_idm45394998912688">BOOST_CONTRACT_NAMED_OVERRIDE</link>(type_name, func_name)
 <link linkend="BOOST_CONTRACT_OVERRIDE">BOOST_CONTRACT_OVERRIDE</link>(func_name)
 <link linkend="BOOST_CONTRACT_OVERRIDES">BOOST_CONTRACT_OVERRIDES</link>(...)</synopsis>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45123869781472"><refmeta><refentrytitle>Macro BOOST_CONTRACT_NAMED_OVERRIDE</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_NAMED_OVERRIDE</refname><refpurpose>Declare an override type with an arbitrary name. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.override_hpp">boost/contract/override.hpp</link>&gt;
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45394998912688"><refmeta><refentrytitle>Macro BOOST_CONTRACT_NAMED_OVERRIDE</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_NAMED_OVERRIDE</refname><refpurpose>Declare an override type trait with an arbitrary name. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.override_hpp">boost/contract/override.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_NAMED_OVERRIDE(type_name, func_name)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>Declare the override type to pass as an explicit template parameter to  <computeroutput><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput> for public function overrides.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.advanced.named_overrides"> Named Overrides</link></para>
+</phrase>BOOST_CONTRACT_NAMED_OVERRIDE(type_name, func_name)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>Declare the override type trait named <computeroutput>type_name</computeroutput> to pass as an explicit template parameter to <computeroutput><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput> for public function overrides.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.advanced.named_overrides"> Named Overrides</link></para>
 </para>
 
 </para><variablelist spacing="compact"><?dbhtml 
               list-presentation="table"
             ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                       list-presentation="table"
-                    ?><varlistentry><term><computeroutput>func_name</computeroutput></term><listitem><para>Function name of the public function override. This macro is called just once even if the function name is overloaded (the same override type is used for all overloaded functions with the same name, see  <link linkend="boost_contract.advanced.function_overloads">
-                    Function Overloads</link>). (This is not a variadic macro parameter but it should never contain commas because it is an identifier.) </para></listitem></varlistentry><varlistentry><term><computeroutput>type_name</computeroutput></term><listitem><para>Name of the override type this macro will declare. (This is not a variadic macro parameter but it should never contain commas because it is an identifier.) </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></refsect1></refentry>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CONTRACT_OVERRIDE"><refmeta><refentrytitle>Macro BOOST_CONTRACT_OVERRIDE</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_OVERRIDE</refname><refpurpose>Declare an override type named <computeroutput>override_<emphasis>func_name</emphasis></computeroutput>. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.override_hpp">boost/contract/override.hpp</link>&gt;
+                    ?><varlistentry><term><computeroutput>func_name</computeroutput></term><listitem><para>Function name of the public function override. This macro is called just once even if the function name is overloaded (the same override type trait is used for all overloaded functions with the same name, see  <link linkend="boost_contract.advanced.function_overloads">
+                    Function Overloads</link>). (This is not a variadic macro parameter but it should never contain commas because it is an identifier.) </para></listitem></varlistentry><varlistentry><term><computeroutput>type_name</computeroutput></term><listitem><para>Name of the override type trait this macro will declare. (This is not a variadic macro parameter but it should never contain commas because it is an identifier.) </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></refsect1></refentry>
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CONTRACT_OVERRIDE"><refmeta><refentrytitle>Macro BOOST_CONTRACT_OVERRIDE</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_OVERRIDE</refname><refpurpose>Declare an override type trait named <computeroutput>override_<emphasis>func_name</emphasis></computeroutput>. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.override_hpp">boost/contract/override.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_OVERRIDE(func_name)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>Declare the override type to pass as an explicit template parameter to  <computeroutput><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput> for public function overrides.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.public_function_overrides__subcontracting_">
+</phrase>BOOST_CONTRACT_OVERRIDE(func_name)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>Declare the override type trait named <computeroutput>override_<emphasis>func_name</emphasis></computeroutput> to pass as an explicit template parameter to <computeroutput><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput> for public function overrides. Use <computeroutput><link linkend="BOOST_CO_idm45394998912688">BOOST_CONTRACT_NAMED_OVERRIDE</link></computeroutput> to generate an override type trait with a name different than <computeroutput>override_<emphasis>func_name</emphasis></computeroutput> (usually not needed).</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.public_function_overrides__subcontracting_">
         Public Function Overrides</link></para>
 </para>
 
@@ -15494,14 +15742,14 @@ On compilers that do not support variadic macros, programmers can manually copy
               list-presentation="table"
             ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                       list-presentation="table"
-                    ?><varlistentry><term><computeroutput>func_name</computeroutput></term><listitem><para>Function name of the public function override. This macro is called just once even if the function name is overloaded (the same override type is used for all overloaded functions with the same name, see  <link linkend="boost_contract.advanced.function_overloads"> Function Overloads</link>). (This is not a variadic macro parameter but it should never contain any comma because it is an identifier.) </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></refsect1></refentry>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CONTRACT_OVERRIDES"><refmeta><refentrytitle>Macro BOOST_CONTRACT_OVERRIDES</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_OVERRIDES</refname><refpurpose>Declare multiple override types at once naming them <computeroutput>override_...</computeroutput> (for convenience). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.override_hpp">boost/contract/override.hpp</link>&gt;
+                    ?><varlistentry><term><computeroutput>func_name</computeroutput></term><listitem><para>Function name of the public function override. This macro is called just once even if the function name is overloaded (the same override type trait is used for all overloaded functions with the same name, see  <link linkend="boost_contract.advanced.function_overloads"> Function Overloads</link>). (This is not a variadic macro parameter but it should never contain any comma because it is an identifier.) </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></refsect1></refentry>
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CONTRACT_OVERRIDES"><refmeta><refentrytitle>Macro BOOST_CONTRACT_OVERRIDES</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_OVERRIDES</refname><refpurpose>Declare multiple override type traits at once naming them <computeroutput>override_...</computeroutput> (for convenience). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.override_hpp">boost/contract/override.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_OVERRIDES(...)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This variadic macro is provided for convenience only, <computeroutput>BOOST_CONTRACT_OVERRIDES(f_1, f_2, ..., f_n)</computeroutput> expands to code equivalent to:</para><para><programlisting><phrase role="identifier">BOOST_CONTRACT_OVERRIDE</phrase><phrase role="special">(</phrase><phrase role="identifier">f_1</phrase><phrase role="special">)</phrase>
+</phrase>BOOST_CONTRACT_OVERRIDES(...)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This variadic macro is provided for convenience as <computeroutput>BOOST_CONTRACT_OVERRIDES(f_1, f_2, ..., f_n)</computeroutput> expands to code equivalent to:</para><para><programlisting><phrase role="identifier">BOOST_CONTRACT_OVERRIDE</phrase><phrase role="special">(</phrase><phrase role="identifier">f_1</phrase><phrase role="special">)</phrase>
 <phrase role="identifier">BOOST_CONTRACT_OVERRIDE</phrase><phrase role="special">(</phrase><phrase role="identifier">f_2</phrase><phrase role="special">)</phrase>
 <phrase role="special">...</phrase>
 <phrase role="identifier">BOOST_CONTRACT_OVERRIDE</phrase><phrase role="special">(</phrase><phrase role="identifier">f_n</phrase><phrase role="special">)</phrase>
-</programlisting></para><para>On compilers that do not support variadic macros, the override types can be equivalently programmed one-by-one calling  <computeroutput><link linkend="BOOST_CONTRACT_OVERRIDE">BOOST_CONTRACT_OVERRIDE</link></computeroutput> for each function name as shown above.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.public_function_overrides__subcontracting_">
+</programlisting></para><para>On compilers that do not support variadic macros, the override type traits can be equivalently programmed one-by-one calling  <computeroutput><link linkend="BOOST_CONTRACT_OVERRIDE">BOOST_CONTRACT_OVERRIDE</link></computeroutput> for each function name as shown above.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.public_function_overrides__subcontracting_">
         Public Function Overrides</link></para>
 </para>
 
@@ -15511,32 +15759,32 @@ On compilers that do not support variadic macros, programmers can manually copy
                       list-presentation="table"
                     ?><varlistentry><term><computeroutput>...</computeroutput></term><listitem><para>A comma separated list of one or more function names of public function overrides. (Each function name should never contain commas because it is an identifier.) </para></listitem></varlistentry></variablelist></listitem></varlistentry></variablelist></refsect1></refentry>
 </section>
-<section id="header.boost.contract.public_function_hpp"><title>Header &lt;<ulink url="../../../../boost/contract/public_function.hpp">boost/contract/public_function.hpp</ulink>&gt;</title><para>Program contracts for public functions (including subcontracting). </para><para>Overloads handle public functions that are static, virtual void, virtual non-void, overriding void, and overriding non-void. </para><synopsis xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">namespace</phrase> <phrase role="identifier">boost</phrase> <phrase role="special">{</phrase>
+<section id="header.boost.contract.public_function_hpp"><title>Header &lt;<ulink url="../../../../boost/contract/public_function.hpp">boost/contract/public_function.hpp</ulink>&gt;</title><para>Program contracts for public functions (including subcontracting). </para><para>The different overloads handle public functions that are static, virtual void, virtual non-void, overriding void, and overriding non-void. </para><synopsis xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="keyword">namespace</phrase> <phrase role="identifier">boost</phrase> <phrase role="special">{</phrase>
   <phrase role="keyword">namespace</phrase> <phrase role="identifier">contract</phrase> <phrase role="special">{</phrase>
     <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Class<phrase role="special">&gt;</phrase> 
-      <link linkend="boost.contract.specify__idm45123870039968">specify_precondition_old_postcondition_except</link> <link linkend="boost.contract.public_f_idm45123869756752"><phrase role="identifier">public_function</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+      <link linkend="boost.contract.specify__idm45394999179040">specify_precondition_old_postcondition_except</link> <link linkend="boost.contract.public_f_idm45394998885120"><phrase role="identifier">public_function</phrase></link><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
     <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Class<phrase role="special">&gt;</phrase> 
-      <link linkend="boost.contract.specify__idm45123870039968">specify_precondition_old_postcondition_except</link> <link linkend="boost.contract.public_f_idm45123869746336"><phrase role="identifier">public_function</phrase></link><phrase role="special">(</phrase><phrase role="identifier">Class</phrase> <phrase role="special">*</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+      <link linkend="boost.contract.specify__idm45394999179040">specify_precondition_old_postcondition_except</link> <link linkend="boost.contract.public_f_idm45394998874224"><phrase role="identifier">public_function</phrase></link><phrase role="special">(</phrase><phrase role="identifier">Class</phrase> <phrase role="special">*</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
     <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Class<phrase role="special">&gt;</phrase> 
-      <link linkend="boost.contract.specify__idm45123870039968">specify_precondition_old_postcondition_except</link> 
-      <link linkend="boost.contract.public_f_idm45123869732528"><phrase role="identifier">public_function</phrase></link><phrase role="special">(</phrase><link linkend="boost.contract.virtual_">virtual_</link> <phrase role="special">*</phrase><phrase role="special">,</phrase> <phrase role="identifier">Class</phrase> <phrase role="special">*</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+      <link linkend="boost.contract.specify__idm45394999179040">specify_precondition_old_postcondition_except</link> 
+      <link linkend="boost.contract.public_f_idm45394998859936"><phrase role="identifier">public_function</phrase></link><phrase role="special">(</phrase><link linkend="boost.contract.virtual_">virtual_</link> <phrase role="special">*</phrase><phrase role="special">,</phrase> <phrase role="identifier">Class</phrase> <phrase role="special">*</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
     <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> VirtualResult<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase> Class<phrase role="special">&gt;</phrase> 
-      <link linkend="boost.contract.specify__idm45123870039968">specify_precondition_old_postcondition_except</link><phrase role="special">&lt;</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&gt;</phrase> 
-      <link linkend="boost.contract.public_f_idm45123869714368"><phrase role="identifier">public_function</phrase></link><phrase role="special">(</phrase><link linkend="boost.contract.virtual_">virtual_</link> <phrase role="special">*</phrase><phrase role="special">,</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&amp;</phrase><phrase role="special">,</phrase> <phrase role="identifier">Class</phrase> <phrase role="special">*</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+      <link linkend="boost.contract.specify__idm45394999179040">specify_precondition_old_postcondition_except</link><phrase role="special">&lt;</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&gt;</phrase> 
+      <link linkend="boost.contract.public_f_idm45394998841296"><phrase role="identifier">public_function</phrase></link><phrase role="special">(</phrase><link linkend="boost.contract.virtual_">virtual_</link> <phrase role="special">*</phrase><phrase role="special">,</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&amp;</phrase><phrase role="special">,</phrase> <phrase role="identifier">Class</phrase> <phrase role="special">*</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
     <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Override<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase> F<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase> Class<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase><phrase role="special">...</phrase> Args<phrase role="special">&gt;</phrase> 
-      <link linkend="boost.contract.specify__idm45123870039968">specify_precondition_old_postcondition_except</link> 
-      <link linkend="boost.contract.public_f_idm45123869691040"><phrase role="identifier">public_function</phrase></link><phrase role="special">(</phrase><link linkend="boost.contract.virtual_">virtual_</link> <phrase role="special">*</phrase><phrase role="special">,</phrase> <phrase role="identifier">F</phrase><phrase role="special">,</phrase> <phrase role="identifier">Class</phrase> <phrase role="special">*</phrase><phrase role="special">,</phrase> <phrase role="identifier">Args</phrase> <phrase role="special">&amp;</phrase><phrase role="special">...</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+      <link linkend="boost.contract.specify__idm45394999179040">specify_precondition_old_postcondition_except</link> 
+      <link linkend="boost.contract.public_f_idm45394998817488"><phrase role="identifier">public_function</phrase></link><phrase role="special">(</phrase><link linkend="boost.contract.virtual_">virtual_</link> <phrase role="special">*</phrase><phrase role="special">,</phrase> <phrase role="identifier">F</phrase><phrase role="special">,</phrase> <phrase role="identifier">Class</phrase> <phrase role="special">*</phrase><phrase role="special">,</phrase> <phrase role="identifier">Args</phrase> <phrase role="special">&amp;</phrase><phrase role="special">...</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
     <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Override<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase> VirtualResult<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase> F<phrase role="special">,</phrase> 
              <phrase role="keyword">typename</phrase> Class<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase><phrase role="special">...</phrase> Args<phrase role="special">&gt;</phrase> 
-      <link linkend="boost.contract.specify__idm45123870039968">specify_precondition_old_postcondition_except</link><phrase role="special">&lt;</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&gt;</phrase> 
-      <link linkend="boost.contract.public_f_idm45123869661408"><phrase role="identifier">public_function</phrase></link><phrase role="special">(</phrase><link linkend="boost.contract.virtual_">virtual_</link> <phrase role="special">*</phrase><phrase role="special">,</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&amp;</phrase><phrase role="special">,</phrase> <phrase role="identifier">F</phrase><phrase role="special">,</phrase> <phrase role="identifier">Class</phrase> <phrase role="special">*</phrase><phrase role="special">,</phrase> <phrase role="identifier">Args</phrase> <phrase role="special">&amp;</phrase><phrase role="special">...</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+      <link linkend="boost.contract.specify__idm45394999179040">specify_precondition_old_postcondition_except</link><phrase role="special">&lt;</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&gt;</phrase> 
+      <link linkend="boost.contract.public_f_idm45394998787360"><phrase role="identifier">public_function</phrase></link><phrase role="special">(</phrase><link linkend="boost.contract.virtual_">virtual_</link> <phrase role="special">*</phrase><phrase role="special">,</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&amp;</phrase><phrase role="special">,</phrase> <phrase role="identifier">F</phrase><phrase role="special">,</phrase> <phrase role="identifier">Class</phrase> <phrase role="special">*</phrase><phrase role="special">,</phrase> <phrase role="identifier">Args</phrase> <phrase role="special">&amp;</phrase><phrase role="special">...</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
   <phrase role="special">}</phrase>
 <phrase role="special">}</phrase></synopsis>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.public_f_idm45123869756752"><refmeta><refentrytitle>Function template public_function</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::public_function</refname><refpurpose>Program contracts for static public functions. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.public_function_hpp">boost/contract/public_function.hpp</link>&gt;
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.public_f_idm45394998885120"><refmeta><refentrytitle>Function template public_function</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::public_function</refname><refpurpose>Program contracts for static public functions. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.public_function_hpp">boost/contract/public_function.hpp</link>&gt;
 
 </phrase>
 <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Class<phrase role="special">&gt;</phrase> 
-  <link linkend="boost.contract.specify__idm45123870039968">specify_precondition_old_postcondition_except</link> <phrase role="identifier">public_function</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is used to specify preconditions, postconditions, exception guarantees, old value copies at body, and check static class invariants for static public functions:</para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase> <phrase role="special">{</phrase>
+  <link linkend="boost.contract.specify__idm45394999179040">specify_precondition_old_postcondition_except</link> <phrase role="identifier">public_function</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is used to specify preconditions, postconditions, exception guarantees, old value copies at body, and check static class invariants for static public functions:</para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase> <phrase role="special">{</phrase>
     <phrase role="keyword">friend</phrase> <phrase role="keyword">class</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">access</phrase><phrase role="special">;</phrase>
 
     <phrase role="keyword">static</phrase> <phrase role="keyword">void</phrase> <phrase role="identifier">static_invariant</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="special">{</phrase> <phrase role="comment">// Optional (as for non-static).</phrase>
@@ -15579,11 +15827,11 @@ On compilers that do not support variadic macros, programmers can manually copy
           list-presentation="table"
         ?><varlistentry><term>Template Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>Class</computeroutput></term><listitem><para>The type of the class containing the static public function declaring the contract. This template parameter must be explicitly specified for static public functions (because they have no object <computeroutput>this</computeroutput> so there is no function argument from which this type template parameter can be deduced by this library).</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>The result of this function must be explicitly assigned to a variable of type <computeroutput><link linkend="boost.contract.check">boost::contract::check</link></computeroutput> declared locally just before the code of the static function body (otherwise this library will generate a run-time error, see <computeroutput><link linkend="BOOST_CO_idm45123870548928">BOOST_CONTRACT_ON_MISSING_CHECK_DECL</link></computeroutput>). </para></listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.public_f_idm45123869746336"><refmeta><refentrytitle>Function template public_function</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::public_function</refname><refpurpose>Program contracts for public functions that are not static, not virtual, and do not not override. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.public_function_hpp">boost/contract/public_function.hpp</link>&gt;
+                ?><varlistentry><term><computeroutput>Class</computeroutput></term><listitem><para>The type of the class containing the static public function declaring the contract. This template parameter must be explicitly specified for static public functions (because they have no object <computeroutput>this</computeroutput> so there is no function argument from which this type template parameter can be automatically deduced by C++).</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>The result of this function must be assigned to a variable of type  <computeroutput><link linkend="boost.contract.check">boost::contract::check</link></computeroutput> declared explicitly (i.e., without using C++11 <computeroutput>auto</computeroutput> declarations) and locally just before the code of the static public function body (otherwise this library will generate a run-time error, see <computeroutput><link linkend="BOOST_CO_idm45394999694064">BOOST_CONTRACT_ON_MISSING_CHECK_DECL</link></computeroutput>). </para></listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.public_f_idm45394998874224"><refmeta><refentrytitle>Function template public_function</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::public_function</refname><refpurpose>Program contracts for public functions that are not static, not virtual, and do not not override. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.public_function_hpp">boost/contract/public_function.hpp</link>&gt;
 
 </phrase>
 <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Class<phrase role="special">&gt;</phrase> 
-  <link linkend="boost.contract.specify__idm45123870039968">specify_precondition_old_postcondition_except</link> <phrase role="identifier">public_function</phrase><phrase role="special">(</phrase><phrase role="identifier">Class</phrase> <phrase role="special">*</phrase> obj<phrase role="special">)</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is used to specify preconditions, postconditions, exception guarantees, old value copies at body, and check class invariants for public functions that are not static, not virtual, and do not override:</para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase> <phrase role="special">{</phrase>
+  <link linkend="boost.contract.specify__idm45394999179040">specify_precondition_old_postcondition_except</link> <phrase role="identifier">public_function</phrase><phrase role="special">(</phrase><phrase role="identifier">Class</phrase> <phrase role="special">*</phrase> obj<phrase role="special">)</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is used to specify preconditions, postconditions, exception guarantees, old value copies at body, and check class invariants for public functions that are not static, not virtual, and do not override:</para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase> <phrase role="special">{</phrase>
     <phrase role="keyword">friend</phrase> <phrase role="keyword">class</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">access</phrase><phrase role="special">;</phrase>
 
     <phrase role="keyword">void</phrase> <phrase role="identifier">invariant</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase> <phrase role="special">{</phrase> <phrase role="comment">// Optional (as for static and volatile).</phrase>
@@ -15630,11 +15878,11 @@ On compilers that do not support variadic macros, programmers can manually copy
                 ?><varlistentry><term><computeroutput>obj</computeroutput></term><listitem><para>The object <computeroutput>this</computeroutput> from the scope of the enclosing public function declaring the contract. This object might be mutable, <computeroutput>const</computeroutput>, <computeroutput>volatile</computeroutput>, or <computeroutput>const volatile</computeroutput> depending on the cv-qualifier of the enclosing function (volatile public functions will check volatile class invariants, see  <link linkend="boost_contract.extras.volatile_public_functions">
             Volatile Public Functions</link>).</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Template Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>Class</computeroutput></term><listitem><para>The type of the class containing the public function declaring the contract. (Usually this template parameter is automatically deduced by C++ and it does not need to be explicitly specified by programmers.)</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>The result of this function must be explicitly assigned to a variable of type <computeroutput><link linkend="boost.contract.check">boost::contract::check</link></computeroutput> declared locally just before the code of the public function body (otherwise this library will generate a run-time error, see <computeroutput><link linkend="BOOST_CO_idm45123870548928">BOOST_CONTRACT_ON_MISSING_CHECK_DECL</link></computeroutput>). </para></listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.public_f_idm45123869732528"><refmeta><refentrytitle>Function template public_function</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::public_function</refname><refpurpose>Program contracts for void virtual public functions that do not override. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.public_function_hpp">boost/contract/public_function.hpp</link>&gt;
+                ?><varlistentry><term><computeroutput>Class</computeroutput></term><listitem><para>The type of the class containing the public function declaring the contract. (Usually this template parameter is automatically deduced by C++ and it does not need to be explicitly specified by programmers.)</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>The result of this function must be assigned to a variable of type  <computeroutput><link linkend="boost.contract.check">boost::contract::check</link></computeroutput> declared explicitly (i.e., without using C++11 <computeroutput>auto</computeroutput> declarations) and locally just before the code of the public function body (otherwise this library will generate a run-time error, see <computeroutput><link linkend="BOOST_CO_idm45394999694064">BOOST_CONTRACT_ON_MISSING_CHECK_DECL</link></computeroutput>). </para></listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.public_f_idm45394998859936"><refmeta><refentrytitle>Function template public_function</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::public_function</refname><refpurpose>Program contracts for void virtual public functions that do not override. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.public_function_hpp">boost/contract/public_function.hpp</link>&gt;
 
 </phrase>
 <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Class<phrase role="special">&gt;</phrase> 
-  <link linkend="boost.contract.specify__idm45123870039968">specify_precondition_old_postcondition_except</link> 
+  <link linkend="boost.contract.specify__idm45394999179040">specify_precondition_old_postcondition_except</link> 
   <phrase role="identifier">public_function</phrase><phrase role="special">(</phrase><link linkend="boost.contract.virtual_">virtual_</link> <phrase role="special">*</phrase> v<phrase role="special">,</phrase> <phrase role="identifier">Class</phrase> <phrase role="special">*</phrase> obj<phrase role="special">)</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is used to specify preconditions, postconditions, exception guarantees, old value copies at body, and check class invariants for public functions that are virtual, do not override, and return <computeroutput>void:</computeroutput> </para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase> <phrase role="special">{</phrase>
     <phrase role="keyword">friend</phrase> <phrase role="keyword">class</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">access</phrase><phrase role="special">;</phrase>
 
@@ -15670,7 +15918,7 @@ On compilers that do not support variadic macros, programmers can manually copy
     
     <phrase role="special">...</phrase>
 <phrase role="special">}</phrase><phrase role="special">;</phrase>
-</programlisting></para><para>A virtual public function should always call  <computeroutput><computeroutput><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput></computeroutput> otherwise this library will not be able to correctly use it for subcontracting.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.virtual_public_functions"> Virtual Public Functions</link></para>
+</programlisting></para><para>A virtual public function should always call  <computeroutput><computeroutput><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput></computeroutput> otherwise this library will not be able to correctly use it for subcontracting.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.virtual_public_functions"> Virtual Public Functions</link></para>
 </para>
 
 
@@ -15682,11 +15930,11 @@ On compilers that do not support variadic macros, programmers can manually copy
                 ?><varlistentry><term><computeroutput>obj</computeroutput></term><listitem><para>The object <computeroutput>this</computeroutput> from the scope of the enclosing virtual public function declaring the contract. This object might be mutable, <computeroutput>const</computeroutput>, <computeroutput>volatile</computeroutput>, or <computeroutput>const volatile</computeroutput> depending on the cv-qualifier of the enclosing function (volatile public functions will check volatile class invariants, see  <link linkend="boost_contract.extras.volatile_public_functions">
             Volatile Public Functions</link>).</para></listitem></varlistentry><varlistentry><term><computeroutput>v</computeroutput></term><listitem><para>The trailing parameter of type  <computeroutput><computeroutput><link linkend="boost.contract.virtual_">boost::contract::virtual_</link></computeroutput></computeroutput><computeroutput>*</computeroutput> and default value <computeroutput>0</computeroutput> from the enclosing virtual public function. </para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Template Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>Class</computeroutput></term><listitem><para>The type of the class containing the virtual public function declaring the contract. (Usually this template parameter is automatically deduced by C++ and it does not need to be explicitly specified by programmers.)</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>The result of this function must be explicitly assigned to a variable of type <computeroutput><link linkend="boost.contract.check">boost::contract::check</link></computeroutput> declared locally just before the code of the public function body (otherwise this library will generate a run-time error, see  <computeroutput><link linkend="BOOST_CO_idm45123870548928">BOOST_CONTRACT_ON_MISSING_CHECK_DECL</link></computeroutput>). </para></listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.public_f_idm45123869714368"><refmeta><refentrytitle>Function template public_function</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::public_function</refname><refpurpose>Program contracts for non-void virtual public functions that do not override. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.public_function_hpp">boost/contract/public_function.hpp</link>&gt;
+                ?><varlistentry><term><computeroutput>Class</computeroutput></term><listitem><para>The type of the class containing the virtual public function declaring the contract. (Usually this template parameter is automatically deduced by C++ and it does not need to be explicitly specified by programmers.)</para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>The result of this function must be assigned to a variable of type  <computeroutput><link linkend="boost.contract.check">boost::contract::check</link></computeroutput> declared explicitly (i.e., without using C++11 <computeroutput>auto</computeroutput> declarations) and locally just before the code of the public function body (otherwise this library will generate a run-time error, see  <computeroutput><link linkend="BOOST_CO_idm45394999694064">BOOST_CONTRACT_ON_MISSING_CHECK_DECL</link></computeroutput>). </para></listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.public_f_idm45394998841296"><refmeta><refentrytitle>Function template public_function</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::public_function</refname><refpurpose>Program contracts for non-void virtual public functions that do not override. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.public_function_hpp">boost/contract/public_function.hpp</link>&gt;
 
 </phrase>
 <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> VirtualResult<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase> Class<phrase role="special">&gt;</phrase> 
-  <link linkend="boost.contract.specify__idm45123870039968">specify_precondition_old_postcondition_except</link><phrase role="special">&lt;</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&gt;</phrase> 
+  <link linkend="boost.contract.specify__idm45394999179040">specify_precondition_old_postcondition_except</link><phrase role="special">&lt;</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&gt;</phrase> 
   <phrase role="identifier">public_function</phrase><phrase role="special">(</phrase><link linkend="boost.contract.virtual_">virtual_</link> <phrase role="special">*</phrase> v<phrase role="special">,</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&amp;</phrase> r<phrase role="special">,</phrase> <phrase role="identifier">Class</phrase> <phrase role="special">*</phrase> obj<phrase role="special">)</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is used to specify preconditions, postconditions, exception guarantees, old value copies at body, and check class invariants for public functions that are virtual, do not override, and do not return <computeroutput>void:</computeroutput> </para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase> <phrase role="special">{</phrase>
     <phrase role="keyword">friend</phrase> <phrase role="keyword">class</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">access</phrase><phrase role="special">;</phrase>
 
@@ -15724,7 +15972,7 @@ On compilers that do not support variadic macros, programmers can manually copy
     
     <phrase role="special">...</phrase>
 <phrase role="special">}</phrase><phrase role="special">;</phrase>
-</programlisting></para><para>A virtual public function should always call  <computeroutput><computeroutput><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput></computeroutput> otherwise this library will not be able to correctly use it for subcontracting.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.virtual_public_functions"> Virtual Public Functions</link></para>
+</programlisting></para><para>A virtual public function should always call  <computeroutput><computeroutput><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput></computeroutput> otherwise this library will not be able to correctly use it for subcontracting.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.virtual_public_functions"> Virtual Public Functions</link></para>
 </para>
 
 
@@ -15737,11 +15985,11 @@ On compilers that do not support variadic macros, programmers can manually copy
             Volatile Public Functions</link>).</para></listitem></varlistentry><varlistentry><term><computeroutput>r</computeroutput></term><listitem><para>A reference to the return value of the enclosing virtual public function declaring the contract. This is usually a local variable declared by the enclosing virtual public function just before the contract, but programmers must set it to the actual value being returned by the function at each <computeroutput>return</computeroutput> statement. </para></listitem></varlistentry><varlistentry><term><computeroutput>v</computeroutput></term><listitem><para>The trailing parameter of type  <computeroutput><computeroutput><link linkend="boost.contract.virtual_">boost::contract::virtual_</link></computeroutput></computeroutput><computeroutput>*</computeroutput> and default value <computeroutput>0</computeroutput> from the enclosing virtual public function. </para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Template Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
                 ?><varlistentry><term><computeroutput>Class</computeroutput></term><listitem><para>The type of the class containing the virtual public function declaring the contract. (Usually this template parameter is automatically deduced by C++ and it does not need to be explicitly specified by programmers.)</para></listitem></varlistentry><varlistentry><term><computeroutput>VirtualResult</computeroutput></term><listitem><para>This type must be the same as, or compatible with, the return type of the enclosing virtual public function declaring the contract (this library might not be able to generate a compile-time error if these types mismatch, but in general that will cause run-time errors or undefined behaviour). Alternatively, <computeroutput>boost::optional&lt;<emphasis>return-type</emphasis>&gt;</computeroutput> can also be used (see  <link linkend="boost_contract.advanced.optional_return_values">
-                        Optional Return Values</link>). (Usually this template parameter is automatically deduced by C++ and it does not need to be explicitly specified by programmers.) </para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>The result of this function must be explicitly assigned to a variable of type <computeroutput><link linkend="boost.contract.check">boost::contract::check</link></computeroutput> declared locally just before the code of the public function body (otherwise this library will generate a run-time error, see  <computeroutput><link linkend="BOOST_CO_idm45123870548928">BOOST_CONTRACT_ON_MISSING_CHECK_DECL</link></computeroutput>). </para></listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.public_f_idm45123869691040"><refmeta><refentrytitle>Function template public_function</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::public_function</refname><refpurpose>Program contracts for void public functions overrides (virtual or not). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.public_function_hpp">boost/contract/public_function.hpp</link>&gt;
+                        Optional Return Values</link>). (Usually this template parameter is automatically deduced by C++ and it does not need to be explicitly specified by programmers.) </para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>The result of this function must be assigned to a variable of type  <computeroutput><link linkend="boost.contract.check">boost::contract::check</link></computeroutput> declared explicitly (i.e., without using C++11 <computeroutput>auto</computeroutput> declarations) and locally just before the code of the public function body (otherwise this library will generate a run-time error, see  <computeroutput><link linkend="BOOST_CO_idm45394999694064">BOOST_CONTRACT_ON_MISSING_CHECK_DECL</link></computeroutput>). </para></listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.public_f_idm45394998817488"><refmeta><refentrytitle>Function template public_function</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::public_function</refname><refpurpose>Program contracts for void public functions overrides (virtual or not). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.public_function_hpp">boost/contract/public_function.hpp</link>&gt;
 
 </phrase>
 <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Override<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase> F<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase> Class<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase><phrase role="special">...</phrase> Args<phrase role="special">&gt;</phrase> 
-  <link linkend="boost.contract.specify__idm45123870039968">specify_precondition_old_postcondition_except</link> 
+  <link linkend="boost.contract.specify__idm45394999179040">specify_precondition_old_postcondition_except</link> 
   <phrase role="identifier">public_function</phrase><phrase role="special">(</phrase><link linkend="boost.contract.virtual_">virtual_</link> <phrase role="special">*</phrase> v<phrase role="special">,</phrase> <phrase role="identifier">F</phrase> f<phrase role="special">,</phrase> <phrase role="identifier">Class</phrase> <phrase role="special">*</phrase> obj<phrase role="special">,</phrase> <phrase role="identifier">Args</phrase> <phrase role="special">&amp;</phrase><phrase role="special">...</phrase> args<phrase role="special">)</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is used to specify preconditions, postconditions, exception guarantees, old value copies at body, and check class invariants for public function overrides (virtual or not) that return <computeroutput>void:</computeroutput> </para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase>
     <phrase role="preprocessor">#define</phrase> <phrase role="identifier">BASES</phrase> <phrase role="keyword">private</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">constructor_precondition</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">u</phrase><phrase role="special">&gt;</phrase><phrase role="special">,</phrase> \
             <phrase role="keyword">public</phrase> <phrase role="identifier">b</phrase><phrase role="special">,</phrase> <phrase role="keyword">private</phrase> <phrase role="identifier">w</phrase>
@@ -15788,7 +16036,7 @@ On compilers that do not support variadic macros, programmers can manually copy
     
     <phrase role="special">...</phrase>
 <phrase role="special">}</phrase><phrase role="special">;</phrase>
-</programlisting></para><para>A public function override should always call  <computeroutput><computeroutput><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput></computeroutput> otherwise this library will not be able to correctly use it for subcontracting.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.public_function_overrides__subcontracting_">
+</programlisting></para><para>A public function override should always call  <computeroutput><computeroutput><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput></computeroutput> otherwise this library will not be able to correctly use it for subcontracting.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.public_function_overrides__subcontracting_">
         Public Function Overrides</link></para>
 </para>
 
@@ -15798,15 +16046,16 @@ On compilers that do not support variadic macros, programmers can manually copy
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>args</computeroutput></term><listitem><para>All arguments passed to the enclosing public function override declaring the contract (by reference and in the order they appear in the enclosing function declaration), but excluding the trailing argument <computeroutput>v</computeroutput>.</para></listitem></varlistentry><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>A pointer to the enclosing public function override declaring the contract. </para></listitem></varlistentry><varlistentry><term><computeroutput>obj</computeroutput></term><listitem><para>The object <computeroutput>this</computeroutput> from the scope of the enclosing public function override declaring the contract. This object might be mutable, <computeroutput>const</computeroutput>, <computeroutput>volatile</computeroutput>, or <computeroutput>const volatile</computeroutput> depending on the cv-qualifier of the enclosing function (volatile public functions will check volatile class invariants, see  <link linkend="boost_contract.extras.volatile_public_functions">
+                ?><varlistentry><term><computeroutput>args</computeroutput></term><listitem><para>All arguments passed to the enclosing public function override declaring the contract (by reference and in the order they appear in the enclosing function declaration), but excluding the trailing argument <computeroutput>v</computeroutput>.</para></listitem></varlistentry><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>A pointer to the enclosing public function override declaring the contract (but see <link linkend="boost_contract.advanced.function_overloads">
+            Function Overloads</link>). </para></listitem></varlistentry><varlistentry><term><computeroutput>obj</computeroutput></term><listitem><para>The object <computeroutput>this</computeroutput> from the scope of the enclosing public function override declaring the contract. This object might be mutable, <computeroutput>const</computeroutput>, <computeroutput>volatile</computeroutput>, or <computeroutput>const volatile</computeroutput> depending on the cv-qualifier of the enclosing function (volatile public functions will check volatile class invariants, see  <link linkend="boost_contract.extras.volatile_public_functions">
             Volatile Public Functions</link>). </para></listitem></varlistentry><varlistentry><term><computeroutput>v</computeroutput></term><listitem><para>The trailing parameter of type  <computeroutput><computeroutput><link linkend="boost.contract.virtual_">boost::contract::virtual_</link></computeroutput></computeroutput><computeroutput>*</computeroutput> and default value <computeroutput>0</computeroutput> from the enclosing public function override. </para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Template Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>Args</computeroutput></term><listitem><para>The types of all parameters passed to the enclosing public function override declaring the contract, but excluding the trailing parameter type <computeroutput><computeroutput><link linkend="boost.contract.virtual_">boost::contract::virtual_</link></computeroutput>*</computeroutput>. On compilers that do not support variadic templates, this library internally implements this function using preprocessor meta-programming (in this case, the maximum number of supported arguments is defined by  <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_MAX_ARGS">BOOST_CONTRACT_MAX_ARGS</link></computeroutput></computeroutput>). (Usually these template parameters are automatically deduced by C++ and they do not need to be explicitly specified by programmers.)</para></listitem></varlistentry><varlistentry><term><computeroutput>Class</computeroutput></term><listitem><para>The type of the class containing the virtual public function declaring the contract. (Usually this template parameter is automatically deduced by C++ and it does not need to be explicitly specified by programmers.) </para></listitem></varlistentry><varlistentry><term><computeroutput>F</computeroutput></term><listitem><para>The function pointer type of the enclosing public function override declaring the contract. (Usually this template parameter is automatically deduced by C++ and it does not need to be explicitly specified by programmers, but see  <link linkend="boost_contract.advanced.function_overloads"> Function Overloads</link>.) </para></listitem></varlistentry><varlistentry><term><computeroutput>Override</computeroutput></term><listitem><para>The type <computeroutput>override_<emphasis>function-name</emphasis></computeroutput> declared using the <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_OVERRIDE">BOOST_CONTRACT_OVERRIDE</link></computeroutput></computeroutput> or related macros. This template parameter must be explicitly specified (because there is no function argument from which it can be automatically deduced by C++). </para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>The result of this function must be explicitly assigned to a variable of type <computeroutput><link linkend="boost.contract.check">boost::contract::check</link></computeroutput> declared locally just before the code of the public function body (otherwise this library will generate a run-time error, see  <computeroutput><link linkend="BOOST_CO_idm45123870548928">BOOST_CONTRACT_ON_MISSING_CHECK_DECL</link></computeroutput>). </para></listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.public_f_idm45123869661408"><refmeta><refentrytitle>Function template public_function</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::public_function</refname><refpurpose>Program contracts for non-void public functions overrides (virtual or not). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.public_function_hpp">boost/contract/public_function.hpp</link>&gt;
+                ?><varlistentry><term><computeroutput>Args</computeroutput></term><listitem><para>The types of all parameters passed to the enclosing public function override declaring the contract, but excluding the trailing parameter type <computeroutput><computeroutput><link linkend="boost.contract.virtual_">boost::contract::virtual_</link></computeroutput>*</computeroutput>. On compilers that do not support variadic templates, this library internally implements this function using preprocessor meta-programming (in this case, the maximum number of supported arguments is defined by  <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_MAX_ARGS">BOOST_CONTRACT_MAX_ARGS</link></computeroutput></computeroutput>). (Usually these template parameters are automatically deduced by C++ and they do not need to be explicitly specified by programmers.)</para></listitem></varlistentry><varlistentry><term><computeroutput>Class</computeroutput></term><listitem><para>The type of the class containing the virtual public function declaring the contract. (Usually this template parameter is automatically deduced by C++ and it does not need to be explicitly specified by programmers.) </para></listitem></varlistentry><varlistentry><term><computeroutput>F</computeroutput></term><listitem><para>The function pointer type of the enclosing public function override declaring the contract. (Usually this template parameter is automatically deduced by C++ and it does not need to be explicitly specified by programmers.) </para></listitem></varlistentry><varlistentry><term><computeroutput>Override</computeroutput></term><listitem><para>The type trait <computeroutput>override_<emphasis>function-name</emphasis></computeroutput> declared using the <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_OVERRIDE">BOOST_CONTRACT_OVERRIDE</link></computeroutput></computeroutput> or related macros. This template parameter must be explicitly specified (because there is no function argument from which it can be automatically deduced by C++). </para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>The result of this function must be assigned to a variable of type  <computeroutput><link linkend="boost.contract.check">boost::contract::check</link></computeroutput> declared explicitly (i.e., without using C++11 <computeroutput>auto</computeroutput> declarations) and locally just before the code of the public function body (otherwise this library will generate a run-time error, see  <computeroutput><link linkend="BOOST_CO_idm45394999694064">BOOST_CONTRACT_ON_MISSING_CHECK_DECL</link></computeroutput>). </para></listitem></varlistentry></variablelist></refsect1></refentry><refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="boost.contract.public_f_idm45394998787360"><refmeta><refentrytitle>Function template public_function</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>boost::contract::public_function</refname><refpurpose>Program contracts for non-void public functions overrides (virtual or not). </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract.public_function_hpp">boost/contract/public_function.hpp</link>&gt;
 
 </phrase>
 <phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> Override<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase> VirtualResult<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase> F<phrase role="special">,</phrase> 
          <phrase role="keyword">typename</phrase> Class<phrase role="special">,</phrase> <phrase role="keyword">typename</phrase><phrase role="special">...</phrase> Args<phrase role="special">&gt;</phrase> 
-  <link linkend="boost.contract.specify__idm45123870039968">specify_precondition_old_postcondition_except</link><phrase role="special">&lt;</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&gt;</phrase> 
+  <link linkend="boost.contract.specify__idm45394999179040">specify_precondition_old_postcondition_except</link><phrase role="special">&lt;</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&gt;</phrase> 
   <phrase role="identifier">public_function</phrase><phrase role="special">(</phrase><link linkend="boost.contract.virtual_">virtual_</link> <phrase role="special">*</phrase> v<phrase role="special">,</phrase> <phrase role="identifier">VirtualResult</phrase> <phrase role="special">&amp;</phrase> r<phrase role="special">,</phrase> <phrase role="identifier">F</phrase> f<phrase role="special">,</phrase> <phrase role="identifier">Class</phrase> <phrase role="special">*</phrase> obj<phrase role="special">,</phrase> 
                   <phrase role="identifier">Args</phrase> <phrase role="special">&amp;</phrase><phrase role="special">...</phrase> args<phrase role="special">)</phrase><phrase role="special">;</phrase></synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is used to specify preconditions, postconditions, exception guarantees, old value copies at body, and check class invariants for public function overrides (virtual or not) that do not return <computeroutput>void:</computeroutput> </para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase>
     <phrase role="preprocessor">#define</phrase> <phrase role="identifier">BASES</phrase> <phrase role="keyword">private</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">constructor_precondition</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">u</phrase><phrase role="special">&gt;</phrase><phrase role="special">,</phrase> \
@@ -15855,7 +16104,7 @@ On compilers that do not support variadic macros, programmers can manually copy
     
     <phrase role="special">...</phrase>
 <phrase role="special">}</phrase><phrase role="special">;</phrase>
-</programlisting></para><para>A public function override should always call  <computeroutput><computeroutput><link linkend="boost.contract.public_f_idm45123869756752">boost::contract::public_function</link></computeroutput></computeroutput> otherwise this library will not be able to correctly use it for subcontracting.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.public_function_overrides__subcontracting_">
+</programlisting></para><para>A public function override should always call  <computeroutput><computeroutput><link linkend="boost.contract.public_f_idm45394998885120">boost::contract::public_function</link></computeroutput></computeroutput> otherwise this library will not be able to correctly use it for subcontracting.</para><para><para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.tutorial.public_function_overrides__subcontracting_">
         Public Function Overrides</link></para>
 </para>
 
@@ -15865,35 +16114,35 @@ On compilers that do not support variadic macros, programmers can manually copy
           list-presentation="table"
         ?><varlistentry><term>Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>args</computeroutput></term><listitem><para>All arguments passed to the enclosing public function override declaring the contract (by reference and in the order they appear in the enclosing function declaration), but excluding the trailing argument <computeroutput>v</computeroutput>.</para></listitem></varlistentry><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>A pointer to the enclosing public function override declaring the contract. </para></listitem></varlistentry><varlistentry><term><computeroutput>obj</computeroutput></term><listitem><para>The object <computeroutput>this</computeroutput> from the scope of the enclosing public function override declaring the contract. This object might be mutable, <computeroutput>const</computeroutput>, <computeroutput>volatile</computeroutput>, or <computeroutput>const volatile</computeroutput> depending on the cv-qualifier of the enclosing function (volatile public functions will check volatile class invariants, see  <link linkend="boost_contract.extras.volatile_public_functions">
+                ?><varlistentry><term><computeroutput>args</computeroutput></term><listitem><para>All arguments passed to the enclosing public function override declaring the contract (by reference and in the order they appear in the enclosing function declaration), but excluding the trailing argument <computeroutput>v</computeroutput>.</para></listitem></varlistentry><varlistentry><term><computeroutput>f</computeroutput></term><listitem><para>A pointer to the enclosing public function override declaring the contract (but see <link linkend="boost_contract.advanced.function_overloads">
+            Function Overloads</link>). </para></listitem></varlistentry><varlistentry><term><computeroutput>obj</computeroutput></term><listitem><para>The object <computeroutput>this</computeroutput> from the scope of the enclosing public function override declaring the contract. This object might be mutable, <computeroutput>const</computeroutput>, <computeroutput>volatile</computeroutput>, or <computeroutput>const volatile</computeroutput> depending on the cv-qualifier of the enclosing function (volatile public functions will check volatile class invariants, see  <link linkend="boost_contract.extras.volatile_public_functions">
             Volatile Public Functions</link>). </para></listitem></varlistentry><varlistentry><term><computeroutput>r</computeroutput></term><listitem><para>A reference to the return value of the enclosing public function override declaring the contract. This is usually a local variable declared by the enclosing public function override just before the contract, but programmers must set it to the actual value being returned by the function at each <computeroutput>return</computeroutput> statement. </para></listitem></varlistentry><varlistentry><term><computeroutput>v</computeroutput></term><listitem><para>The trailing parameter of type  <computeroutput><computeroutput><link linkend="boost.contract.virtual_">boost::contract::virtual_</link></computeroutput></computeroutput><computeroutput>*</computeroutput> and default value <computeroutput>0</computeroutput> from the enclosing public function override. </para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Template Parameters:</term><listitem><variablelist spacing="compact"><?dbhtml 
                   list-presentation="table"
-                ?><varlistentry><term><computeroutput>Args</computeroutput></term><listitem><para>The types of all parameters passed to the enclosing public function override declaring the contract, but excluding the trailing parameter type <computeroutput><computeroutput><link linkend="boost.contract.virtual_">boost::contract::virtual_</link></computeroutput>*</computeroutput>. On compilers that do not support variadic templates, this library internally implements this function using preprocessor meta-programming (in this case, the maximum number of supported arguments is defined by  <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_MAX_ARGS">BOOST_CONTRACT_MAX_ARGS</link></computeroutput></computeroutput>). (Usually these template parameters are automatically deduced by C++ and they do not need to be explicitly specified by programmers.)</para></listitem></varlistentry><varlistentry><term><computeroutput>Class</computeroutput></term><listitem><para>The type of the class containing the virtual public function declaring the contract. (Usually this template parameter is automatically deduced by C++ and it does not need to be explicitly specified by programmers.) </para></listitem></varlistentry><varlistentry><term><computeroutput>F</computeroutput></term><listitem><para>The function pointer type of the enclosing public function override declaring the contract. (Usually this template parameter is automatically deduced by C++ and it does not need to be explicitly specified by programmers, but see  <link linkend="boost_contract.advanced.function_overloads">
-            Function Overloads</link>.) </para></listitem></varlistentry><varlistentry><term><computeroutput>Override</computeroutput></term><listitem><para>The type <computeroutput>override_<emphasis>function-name</emphasis></computeroutput> declared using the <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_OVERRIDE">BOOST_CONTRACT_OVERRIDE</link></computeroutput></computeroutput> or related macros. This template parameter must be explicitly specified (because there is no function argument from which it can be automatically deduced by C++). </para></listitem></varlistentry><varlistentry><term><computeroutput>VirtualResult</computeroutput></term><listitem><para>This type must be the same as, or compatible with, the return type of the enclosing public function override declaring the contract (this library might not be able to generate a compile-time error if these types mismatch, but in general that will cause run-time errors or undefined behaviour). Alternatively, <computeroutput>boost::optional&lt;<emphasis>return-type</emphasis>&gt;</computeroutput> can also be used (see  <link linkend="boost_contract.advanced.optional_return_values">
-                        Optional Return Values</link>). (Usually this template parameter is automatically deduced by C++ and it does not need to be explicitly specified by programmers.) </para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>The result of this function must be explicitly assigned to a variable of type <computeroutput><link linkend="boost.contract.check">boost::contract::check</link></computeroutput> declared locally just before the code of the public function body (otherwise this library will generate a run-time error, see  <computeroutput><link linkend="BOOST_CO_idm45123870548928">BOOST_CONTRACT_ON_MISSING_CHECK_DECL</link></computeroutput>). </para></listitem></varlistentry></variablelist></refsect1></refentry>
+                ?><varlistentry><term><computeroutput>Args</computeroutput></term><listitem><para>The types of all parameters passed to the enclosing public function override declaring the contract, but excluding the trailing parameter type <computeroutput><computeroutput><link linkend="boost.contract.virtual_">boost::contract::virtual_</link></computeroutput>*</computeroutput>. On compilers that do not support variadic templates, this library internally implements this function using preprocessor meta-programming (in this case, the maximum number of supported arguments is defined by  <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_MAX_ARGS">BOOST_CONTRACT_MAX_ARGS</link></computeroutput></computeroutput>). (Usually these template parameters are automatically deduced by C++ and they do not need to be explicitly specified by programmers.)</para></listitem></varlistentry><varlistentry><term><computeroutput>Class</computeroutput></term><listitem><para>The type of the class containing the virtual public function declaring the contract. (Usually this template parameter is automatically deduced by C++ and it does not need to be explicitly specified by programmers.) </para></listitem></varlistentry><varlistentry><term><computeroutput>F</computeroutput></term><listitem><para>The function pointer type of the enclosing public function override declaring the contract. (Usually this template parameter is automatically deduced by C++ and it does not need to be explicitly specified by programmers.) </para></listitem></varlistentry><varlistentry><term><computeroutput>Override</computeroutput></term><listitem><para>The type trait <computeroutput>override_<emphasis>function-name</emphasis></computeroutput> declared using the <computeroutput><computeroutput><link linkend="BOOST_CONTRACT_OVERRIDE">BOOST_CONTRACT_OVERRIDE</link></computeroutput></computeroutput> or related macros. This template parameter must be explicitly specified (because there is no function argument from which it can be automatically deduced by C++). </para></listitem></varlistentry><varlistentry><term><computeroutput>VirtualResult</computeroutput></term><listitem><para>This type must be the same as, or compatible with, the return type of the enclosing public function override declaring the contract (this library might not be able to generate a compile-time error if these types mismatch, but in general that will cause run-time errors or undefined behaviour). Alternatively, <computeroutput>boost::optional&lt;<emphasis>return-type</emphasis>&gt;</computeroutput> can also be used (see  <link linkend="boost_contract.advanced.optional_return_values">
+                        Optional Return Values</link>). (Usually this template parameter is automatically deduced by C++ and it does not need to be explicitly specified by programmers.) </para></listitem></varlistentry></variablelist></listitem></varlistentry><varlistentry><term>Returns:</term><listitem><para>The result of this function must be assigned to a variable of type  <computeroutput><link linkend="boost.contract.check">boost::contract::check</link></computeroutput> declared explicitly (i.e., without using C++11 <computeroutput>auto</computeroutput> declarations) and locally just before the code of the public function body (otherwise this library will generate a run-time error, see  <computeroutput><link linkend="BOOST_CO_idm45394999694064">BOOST_CONTRACT_ON_MISSING_CHECK_DECL</link></computeroutput>). </para></listitem></varlistentry></variablelist></refsect1></refentry>
 </section>
-<section id="header.boost.contract_macro_hpp"><title>Header &lt;<ulink url="../../../../boost/contract_macro.hpp">boost/contract_macro.hpp</ulink>&gt;</title><para>Allow to disable contracts to completely remove their compile-time and run-time overhead. </para><para>This header also includes all headers file <computeroutput>boost/contract/*.hpp</computeroutput> that are necessary to use its macros.</para><para>Almost all the macros defined in this header file are variadic macros. On compilers that do not support variadic macros, programmers can manually code <computeroutput>#ifndef BOOST_CONTRACT_NO_...</computeroutput> statements instead (see  <link linkend="boost_contract.extras.disable_contract_compilation__macro_interface_">
+<section id="header.boost.contract_macro_hpp"><title>Header &lt;<ulink url="../../../../boost/contract_macro.hpp">boost/contract_macro.hpp</ulink>&gt;</title><para>Allow to disable contracts to completely remove their compile-time and run-time overhead. </para><para>This header automatically includes all header files <computeroutput>boost/contract/*.hpp</computeroutput> necessary to use its macros.</para><para>Almost all the macros defined in this header file are variadic macros. On compilers that do not support variadic macros, programmers can manually code <computeroutput>#ifndef BOOST_CONTRACT_NO_...</computeroutput> statements instead (see  <link linkend="boost_contract.extras.disable_contract_compilation__macro_interface_">
 Disable Contract Compilation</link>). </para><synopsis xmlns:xi="http://www.w3.org/2001/XInclude">
 
-<link linkend="BOOST_CO_idm45123869622736">BOOST_CONTRACT_PRECONDITION</link>(...)
-<link linkend="BOOST_CO_idm45123869611056">BOOST_CONTRACT_POSTCONDITION</link>(...)
+<link linkend="BOOST_CO_idm45394998748208">BOOST_CONTRACT_PRECONDITION</link>(...)
+<link linkend="BOOST_CO_idm45394998736528">BOOST_CONTRACT_POSTCONDITION</link>(...)
 <link linkend="BOOST_CONTRACT_EXCEPT">BOOST_CONTRACT_EXCEPT</link>(...)
 <link linkend="BOOST_CONTRACT_OLD">BOOST_CONTRACT_OLD</link>(...)
 <link linkend="BOOST_CONTRACT_OLD_PTR">BOOST_CONTRACT_OLD_PTR</link>(...)
-<link linkend="BOOST_CO_idm45123869551136">BOOST_CONTRACT_OLD_PTR_IF_COPYABLE</link>(...)
+<link linkend="BOOST_CO_idm45394998674080">BOOST_CONTRACT_OLD_PTR_IF_COPYABLE</link>(...)
 <link linkend="BOOST_CONTRACT_INVARIANT">BOOST_CONTRACT_INVARIANT</link>(...)
-<link linkend="BOOST_CO_idm45123869512624">BOOST_CONTRACT_INVARIANT_VOLATILE</link>(...)
-<link linkend="BOOST_CO_idm45123869498768">BOOST_CONTRACT_STATIC_INVARIANT</link>(...)
+<link linkend="BOOST_CO_idm45394998635328">BOOST_CONTRACT_INVARIANT_VOLATILE</link>(...)
+<link linkend="BOOST_CO_idm45394998621472">BOOST_CONTRACT_STATIC_INVARIANT</link>(...)
 <link linkend="BOOST_CONTRACT_CONSTRUCTOR">BOOST_CONTRACT_CONSTRUCTOR</link>(...)
-<link linkend="BOOST_CO_idm45123869465008">BOOST_CONTRACT_CONSTRUCTOR_PRECONDITION</link>(...)
+<link linkend="BOOST_CO_idm45394998587680">BOOST_CONTRACT_CONSTRUCTOR_PRECONDITION</link>(...)
 <link linkend="BOOST_CONTRACT_DESTRUCTOR">BOOST_CONTRACT_DESTRUCTOR</link>(...)
 <link linkend="BOOST_CONTRACT_FUNCTION">BOOST_CONTRACT_FUNCTION</link>()
-<link linkend="BOOST_CO_idm45123869412432">BOOST_CONTRACT_STATIC_PUBLIC_FUNCTION</link>(...)
-<link linkend="BOOST_CO_idm45123869395440">BOOST_CONTRACT_PUBLIC_FUNCTION</link>(...)
-<link linkend="BOOST_CO_idm45123869363568">BOOST_CONTRACT_PUBLIC_FUNCTION_OVERRIDE</link>(...)</synopsis>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45123869622736"><refmeta><refentrytitle>Macro BOOST_CONTRACT_PRECONDITION</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_PRECONDITION</refname><refpurpose>Program preconditions that can be completely disabled at compile-time. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract_macro_hpp">boost/contract_macro.hpp</link>&gt;
+<link linkend="BOOST_CO_idm45394998534992">BOOST_CONTRACT_STATIC_PUBLIC_FUNCTION</link>(...)
+<link linkend="BOOST_CO_idm45394998517984">BOOST_CONTRACT_PUBLIC_FUNCTION</link>(...)
+<link linkend="BOOST_CO_idm45394998486064">BOOST_CONTRACT_PUBLIC_FUNCTION_OVERRIDE</link>(...)</synopsis>
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45394998748208"><refmeta><refentrytitle>Macro BOOST_CONTRACT_PRECONDITION</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_PRECONDITION</refname><refpurpose>Program preconditions that can be completely disabled at compile-time. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract_macro_hpp">boost/contract_macro.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_PRECONDITION(...)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para><computeroutput>BOOST_CONTRACT_PRECONDITION(f)</computeroutput> expands to code equivalent to the following (note that no code is generated when  <computeroutput><link linkend="BOOST_CO_idm45123870517808">BOOST_CONTRACT_NO_PRECONDITIONS</link></computeroutput> is defined):</para><para><programlisting><phrase role="preprocessor">#ifndef</phrase> <phrase role="identifier">BOOST_CONTRACT_NO_PRECONDITIONS</phrase>
+</phrase>BOOST_CONTRACT_PRECONDITION(...)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para><computeroutput>BOOST_CONTRACT_PRECONDITION(f)</computeroutput> expands to code equivalent to the following (note that no code is generated when  <computeroutput><link linkend="BOOST_CO_idm45394999662416">BOOST_CONTRACT_NO_PRECONDITIONS</link></computeroutput> is defined):</para><para><programlisting><phrase role="preprocessor">#ifndef</phrase> <phrase role="identifier">BOOST_CONTRACT_NO_PRECONDITIONS</phrase>
     <phrase role="special">.</phrase><phrase role="identifier">precondition</phrase><phrase role="special">(</phrase><phrase role="identifier">f</phrase><phrase role="special">)</phrase>
 <phrase role="preprocessor">#endif</phrase>
 </programlisting></para><para>Where:</para><para><itemizedlist>
@@ -15904,13 +16153,13 @@ Disable Contract Compilation</link>). </para><synopsis xmlns:xi="http://www.w3.o
         Disable Contract Compilation</link>,  <link linkend="boost_contract.tutorial.preconditions"> Preconditions</link> </para>
 </para>
 </para></refsect1></refentry>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45123869611056"><refmeta><refentrytitle>Macro BOOST_CONTRACT_POSTCONDITION</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_POSTCONDITION</refname><refpurpose>Program postconditions that can be completely disabled at compile-time. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract_macro_hpp">boost/contract_macro.hpp</link>&gt;
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45394998736528"><refmeta><refentrytitle>Macro BOOST_CONTRACT_POSTCONDITION</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_POSTCONDITION</refname><refpurpose>Program postconditions that can be completely disabled at compile-time. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract_macro_hpp">boost/contract_macro.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_POSTCONDITION(...)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para><computeroutput>BOOST_CONTRACT_POSTCONDITION(f)</computeroutput> expands to code equivalent to the following (note that no code is generated when  <computeroutput><link linkend="BOOST_CO_idm45123870511440">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput> is defined):</para><para><programlisting><phrase role="preprocessor">#ifndef</phrase> <phrase role="identifier">BOOST_CONTRACT_NO_POSTCONDITIONS</phrase>
+</phrase>BOOST_CONTRACT_POSTCONDITION(...)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para><computeroutput>BOOST_CONTRACT_POSTCONDITION(f)</computeroutput> expands to code equivalent to the following (note that no code is generated when  <computeroutput><link linkend="BOOST_CO_idm45394999656032">BOOST_CONTRACT_NO_POSTCONDITIONS</link></computeroutput> is defined):</para><para><programlisting><phrase role="preprocessor">#ifndef</phrase> <phrase role="identifier">BOOST_CONTRACT_NO_POSTCONDITIONS</phrase>
     <phrase role="special">.</phrase><phrase role="identifier">postcondition</phrase><phrase role="special">(</phrase><phrase role="identifier">f</phrase><phrase role="special">)</phrase>
 <phrase role="preprocessor">#endif</phrase>
 </programlisting></para><para>Where:</para><para><itemizedlist>
-<listitem><para><computeroutput><emphasis role="bold">f</emphasis></computeroutput> is the functor called by this library to check postconditions <computeroutput>f(...)</computeroutput>. Assertions within this functor are usually programmed using  <computeroutput><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput>, but any exception thrown by a call to this functor indicates a contract assertion failure (and will result in this library calling  <computeroutput><link linkend="boost.contract.postcondition_failure">boost::contract::postcondition_failure</link></computeroutput>). This functor should capture variables by (constant) references (to access the values they will have at function exit). This functor takes the return value (preferably by <computeroutput>const&amp;</computeroutput>) as its one single parameter but only for virtual public functions and public functions overrides, otherwise it takes no parameter. (This is a variadic macro parameter so it can contain commas not protected by round parenthesis.)</para>
+<listitem><para><computeroutput><emphasis role="bold">f</emphasis></computeroutput> is the functor called by this library to check postconditions <computeroutput>f()</computeroutput> or <computeroutput>f(result)</computeroutput>. Assertions within this functor are usually programmed using  <computeroutput><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput>, but any exception thrown by a call to this functor indicates a contract assertion failure (and will result in this library calling  <computeroutput><link linkend="boost.contract.postcondition_failure">boost::contract::postcondition_failure</link></computeroutput>). This functor should capture variables by (constant) references (to access the values they will have at function exit). This functor takes the return value (preferably by <computeroutput>const&amp;</computeroutput>) <computeroutput>result</computeroutput> as its one single parameter <computeroutput>f(result)</computeroutput> but only for virtual public functions and public functions overrides, otherwise it takes no parameter <computeroutput>f()</computeroutput>. (This is a variadic macro parameter so it can contain commas not protected by round parenthesis.)</para>
 </listitem>
 </itemizedlist>
 <para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.extras.disable_contract_compilation__macro_interface_">
@@ -15940,21 +16189,21 @@ Disable Contract Compilation</link>). </para><synopsis xmlns:xi="http://www.w3.o
 </listitem>
 </itemizedlist>
 <para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.extras.disable_contract_compilation__macro_interface_">
-        Disable Contract Compilation</link>,  <link linkend="boost_contract.advanced.old_value_copies_at_body">
-        Old Value Copies at Body</link> </para>
+        Disable Contract Compilation</link>,  <link linkend="boost_contract.advanced.old_values_copied_at_body">
+        Old Values Copied at Body</link> </para>
 </para>
 </para></refsect1></refentry>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CONTRACT_OLD_PTR"><refmeta><refentrytitle>Macro BOOST_CONTRACT_OLD_PTR</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_OLD_PTR</refname><refpurpose>Program old values that can be completely disabled at compile-time and require the old value type to be copyable. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract_macro_hpp">boost/contract_macro.hpp</link>&gt;
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CONTRACT_OLD_PTR"><refmeta><refentrytitle>Macro BOOST_CONTRACT_OLD_PTR</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_OLD_PTR</refname><refpurpose>Program old values that can be completely disabled at compile-time for old value types that are required to be copyable. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract_macro_hpp">boost/contract_macro.hpp</link>&gt;
 
 </phrase>BOOST_CONTRACT_OLD_PTR(...)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is used to program old value copies for copyable types:</para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase> <phrase role="special">{</phrase>
 <phrase role="keyword">public</phrase><phrase role="special">:</phrase>
     <phrase role="keyword">void</phrase> <phrase role="identifier">f</phrase><phrase role="special">(</phrase><phrase role="special">...</phrase><phrase role="special">)</phrase> <phrase role="special">{</phrase>
-        <phrase role="identifier">BOOST_CONTRACT_OLD_PTR</phrase><phrase role="special">(</phrase><phrase role="identifier">old_type_a</phrase><phrase role="special">)</phrase><phrase role="special">(</phrase><phrase role="identifier">old_var_a</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
-        <phrase role="identifier">BOOST_CONTRACT_OLD_PTR</phrase><phrase role="special">(</phrase><phrase role="identifier">old_type_b</phrase><phrase role="special">)</phrase><phrase role="special">(</phrase><phrase role="identifier">old_var_b</phrase><phrase role="special">,</phrase> <phrase role="identifier">old_expr_b</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+        <phrase role="identifier">BOOST_CONTRACT_OLD_PTR</phrase><phrase role="special">(</phrase><phrase role="identifier">old_type_a</phrase><phrase role="special">)</phrase><phrase role="special">(</phrase><phrase role="identifier">old_var_a</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase> <phrase role="comment">// Null...</phrase>
+        <phrase role="identifier">BOOST_CONTRACT_OLD_PTR</phrase><phrase role="special">(</phrase><phrase role="identifier">old_type_b</phrase><phrase role="special">)</phrase><phrase role="special">(</phrase><phrase role="identifier">old_var_b</phrase><phrase role="special">,</phrase> <phrase role="identifier">old_expr_b</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase> <phrase role="comment">// Set.</phrase>
         <phrase role="identifier">BOOST_CONTRACT_PUBLIC_FUNCTION</phrase><phrase role="special">(</phrase><phrase role="keyword">this</phrase><phrase role="special">)</phrase>
             <phrase role="special">...</phrase>
             <phrase role="identifier">BOOST_CONTRACT_OLD</phrase><phrase role="special">(</phrase><phrase role="special">[</phrase><phrase role="special">&amp;</phrase><phrase role="special">]</phrase> <phrase role="special">{</phrase>
-                <phrase role="identifier">old_var_a</phrase> <phrase role="special">=</phrase> <phrase role="identifier">BOOST_CONTRACT_OLDOF</phrase><phrase role="special">(</phrase><phrase role="identifier">old_expr_a</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+                <phrase role="identifier">old_var_a</phrase> <phrase role="special">=</phrase> <phrase role="identifier">BOOST_CONTRACT_OLDOF</phrase><phrase role="special">(</phrase><phrase role="identifier">old_expr_a</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase> <phrase role="comment">// ...set.</phrase>
                 <phrase role="special">...</phrase>
             <phrase role="special">}</phrase><phrase role="special">)</phrase>
             <phrase role="special">...</phrase>
@@ -15964,12 +16213,12 @@ Disable Contract Compilation</link>). </para><synopsis xmlns:xi="http://www.w3.o
     <phrase role="special">}</phrase>
 
     <phrase role="keyword">virtual</phrase> <phrase role="keyword">void</phrase> <phrase role="identifier">g</phrase><phrase role="special">(</phrase><phrase role="special">...</phrase><phrase role="special">,</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">virtual_</phrase><phrase role="special">*</phrase> <phrase role="identifier">v</phrase> <phrase role="special">=</phrase> <phrase role="number">0</phrase><phrase role="special">)</phrase> <phrase role="special">{</phrase>
-        <phrase role="identifier">BOOST_CONTRACT_OLD_PTR</phrase><phrase role="special">(</phrase><phrase role="identifier">old_type_a</phrase><phrase role="special">)</phrase><phrase role="special">(</phrase><phrase role="identifier">old_var_a</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
-        <phrase role="identifier">BOOST_CONTRACT_OLD_PTR</phrase><phrase role="special">(</phrase><phrase role="identifier">old_type_b</phrase><phrase role="special">)</phrase><phrase role="special">(</phrase><phrase role="identifier">v</phrase><phrase role="special">,</phrase> <phrase role="identifier">old_var_b</phrase><phrase role="special">,</phrase> <phrase role="identifier">old_expr_b</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+        <phrase role="identifier">BOOST_CONTRACT_OLD_PTR</phrase><phrase role="special">(</phrase><phrase role="identifier">old_type_a</phrase><phrase role="special">)</phrase><phrase role="special">(</phrase><phrase role="identifier">old_var_a</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase> <phrase role="comment">// No `v`</phrase>
+        <phrase role="identifier">BOOST_CONTRACT_OLD_PTR</phrase><phrase role="special">(</phrase><phrase role="identifier">old_type_b</phrase><phrase role="special">)</phrase><phrase role="special">(</phrase><phrase role="identifier">v</phrase><phrase role="special">,</phrase> <phrase role="identifier">old_var_b</phrase><phrase role="special">,</phrase> <phrase role="identifier">old_expr_b</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase> <phrase role="comment">// `v`</phrase>
         <phrase role="identifier">BOOST_CONTRACT_PUBLIC_FUNCTION</phrase><phrase role="special">(</phrase><phrase role="identifier">v</phrase><phrase role="special">,</phrase> <phrase role="keyword">this</phrase><phrase role="special">)</phrase>
             <phrase role="special">...</phrase>
             <phrase role="identifier">BOOST_CONTRACT_OLD</phrase><phrase role="special">(</phrase><phrase role="special">[</phrase><phrase role="special">&amp;</phrase><phrase role="special">]</phrase> <phrase role="special">{</phrase>
-                <phrase role="identifier">old_var_a</phrase> <phrase role="special">=</phrase> <phrase role="identifier">BOOST_CONTRACT_OLDOF</phrase><phrase role="special">(</phrase><phrase role="identifier">v</phrase><phrase role="special">,</phrase> <phrase role="identifier">old_expr_a</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
+                <phrase role="identifier">old_var_a</phrase> <phrase role="special">=</phrase> <phrase role="identifier">BOOST_CONTRACT_OLDOF</phrase><phrase role="special">(</phrase><phrase role="identifier">v</phrase><phrase role="special">,</phrase> <phrase role="identifier">old_expr_a</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase> <phrase role="comment">// `v`</phrase>
                 <phrase role="special">...</phrase>
             <phrase role="special">}</phrase><phrase role="special">)</phrase>
             <phrase role="special">...</phrase>
@@ -15993,20 +16242,20 @@ Disable Contract Compilation</link>). </para><synopsis xmlns:xi="http://www.w3.o
             <phrase role="identifier">BOOST_CONTRACT_OLDOF</phrase><phrase role="special">(</phrase><phrase role="identifier">v</phrase><phrase role="special">,</phrase> <phrase role="identifier">old_expr</phrase><phrase role="special">)</phrase>
 <phrase role="preprocessor">#endif</phrase>
 </programlisting></para><para>Where:</para><para><itemizedlist>
-<listitem><para><computeroutput><emphasis role="bold">old_type</emphasis></computeroutput> is the type of the pointed old value. This type must be copyable (i.e., <computeroutput>boost::contract::is_old_value_copyable&lt;old_type&gt;::value</computeroutput> is <computeroutput>true</computeroutput>), otherwise this pointer will always be null and this library will generate a compile-time error when the pointer is dereferenced (see <computeroutput><link linkend="BOOST_CO_idm45123869551136">BOOST_CONTRACT_OLD_PTR_IF_COPYABLE</link></computeroutput>). (This is a variadic macro parameter so it can contain commas not protected by round parenthesis.) </para>
+<listitem><para><computeroutput><emphasis role="bold">old_type</emphasis></computeroutput> is the type of the pointed old value. This type must be copyable (i.e., <computeroutput>boost::contract::is_old_value_copyable&lt;old_type&gt;::value</computeroutput> is <computeroutput>true</computeroutput>), otherwise this pointer will always be null and this library will generate a compile-time error when the pointer is dereferenced (see <computeroutput><link linkend="BOOST_CO_idm45394998674080">BOOST_CONTRACT_OLD_PTR_IF_COPYABLE</link></computeroutput>). (This is a variadic macro parameter so it can contain commas not protected by round parenthesis.) (Rationale: Template parameters like this one are specified to this library macro interface using their own set of parenthesis <computeroutput>SOME_MACRO(template_params)(other_params)</computeroutput>.) </para>
 </listitem>
-<listitem><para><computeroutput><emphasis role="bold">v</emphasis></computeroutput> is the extra parameter of type  <computeroutput><link linkend="boost.contract.virtual_">boost::contract::virtual_</link></computeroutput><computeroutput>*</computeroutput> and default value <computeroutput>0</computeroutput> from the enclosing virtual public function or public function override declaring the contract. (This is not a variadic macro parameter.) </para>
+<listitem><para><computeroutput><emphasis role="bold">v</emphasis></computeroutput> is the extra training parameter of type  <computeroutput><link linkend="boost.contract.virtual_">boost::contract::virtual_</link></computeroutput><computeroutput>*</computeroutput> and default value <computeroutput>0</computeroutput> from the enclosing virtual public function or public function override declaring the contract. (This is not a variadic macro parameter but it should never contain commas because it is an identifier.) </para>
 </listitem>
 <listitem><para><computeroutput><emphasis role="bold">old_var</emphasis></computeroutput> is the name of the old value pointer variable. (This is not a variadic macro parameter but it should never contain commas because it is an identifier.) </para>
 </listitem>
-<listitem><para><computeroutput><emphasis role="bold">old_expr</emphasis></computeroutput> is the expression to be evaluated and copied in the old value pointer. (This is not a variadic macro parameter so any comma it might contain must be protected by round parenthesis, <computeroutput>BOOST_CONTRACT_OLD_PTR(old_type)(v, old_var, (old_expr))</computeroutput> will always work.)</para>
+<listitem><para><computeroutput><emphasis role="bold">old_expr</emphasis></computeroutput> is the expression to be evaluated and copied in the old value pointer. (This is not a variadic macro parameter so any comma it might contain must be protected by round parenthesis and <computeroutput>BOOST_CONTRACT_OLD_PTR(old_type)(v, old_var, (old_expr))</computeroutput> will always work.)</para>
 </listitem>
 </itemizedlist>
 <para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.extras.disable_contract_compilation__macro_interface_">
         Disable Contract Compilation</link>,  <link linkend="boost_contract.tutorial.old_values"> Old Values</link> </para>
 </para>
 </para></refsect1></refentry>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45123869551136"><refmeta><refentrytitle>Macro BOOST_CONTRACT_OLD_PTR_IF_COPYABLE</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_OLD_PTR_IF_COPYABLE</refname><refpurpose>Program old values that can be completely disabled at compile-time and do not require the old value type to be copyable. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract_macro_hpp">boost/contract_macro.hpp</link>&gt;
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45394998674080"><refmeta><refentrytitle>Macro BOOST_CONTRACT_OLD_PTR_IF_COPYABLE</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_OLD_PTR_IF_COPYABLE</refname><refpurpose>Program old values that can be completely disabled at compile-time for old value types that are not required to be copyable. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract_macro_hpp">boost/contract_macro.hpp</link>&gt;
 
 </phrase>BOOST_CONTRACT_OLD_PTR_IF_COPYABLE(...)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is used to program old value copies for types that might or might not be copyable:</para><para><programlisting><phrase role="keyword">template</phrase><phrase role="special">&lt;</phrase><phrase role="keyword">typename</phrase> <phrase role="identifier">T</phrase><phrase role="special">&gt;</phrase> <phrase role="comment">// Type `T` might or not be copyable.</phrase>
 <phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase> <phrase role="special">{</phrase>
@@ -16066,11 +16315,11 @@ Disable Contract Compilation</link>). </para><synopsis xmlns:xi="http://www.w3.o
 </programlisting></para><para>Where:</para><para><itemizedlist>
 <listitem><para><computeroutput><emphasis role="bold">old_type</emphasis></computeroutput> is the type of the pointed old value. If this type is not copyable (i.e., <computeroutput>boost::contract::is_old_value_copyable&lt;old_type&gt;::value</computeroutput> is <computeroutput>false</computeroutput>), this pointer will always be null, but this library will not generate a compile-time error when this pointer is dereferenced (see <computeroutput><link linkend="BOOST_CONTRACT_OLD_PTR">BOOST_CONTRACT_OLD_PTR</link></computeroutput>). (This is a variadic macro parameter so it can contain commas not protected by round parenthesis.) </para>
 </listitem>
-<listitem><para><computeroutput><emphasis role="bold">v</emphasis></computeroutput> is the extra parameter of type  <computeroutput><link linkend="boost.contract.virtual_">boost::contract::virtual_</link></computeroutput><computeroutput>*</computeroutput> and default value <computeroutput>0</computeroutput> from the enclosing virtual public function or public function override declaring the contract. (This is not a variadic macro parameter.) </para>
+<listitem><para><computeroutput><emphasis role="bold">v</emphasis></computeroutput> is the extra trailing parameter of type  <computeroutput><link linkend="boost.contract.virtual_">boost::contract::virtual_</link></computeroutput><computeroutput>*</computeroutput> and default value <computeroutput>0</computeroutput> from the enclosing virtual public function or public function override declaring the contract. (This is not a variadic macro parameter but it should never contain commas because it is an identifier.) </para>
 </listitem>
 <listitem><para><computeroutput><emphasis role="bold">old_var</emphasis></computeroutput> is the name of the old value pointer variable. (This is not a variadic macro parameter but it should never contain commas because it is an identifier.) </para>
 </listitem>
-<listitem><para><computeroutput><emphasis role="bold">old_expr</emphasis></computeroutput> is the expression to be evaluated and copied in the old value pointer. (This is not a variadic macro parameter so any comma it might contain must be protected by round parenthesis, <computeroutput>BOOST_CONTRACT_OLD_PTR_IF_COPYABLE(old_type)(v, old_var, (old_expr))</computeroutput> will always work.)</para>
+<listitem><para><computeroutput><emphasis role="bold">old_expr</emphasis></computeroutput> is the expression to be evaluated and copied in the old value pointer. (This is not a variadic macro parameter so any comma it might contain must be protected by round parenthesis and <computeroutput>BOOST_CONTRACT_OLD_PTR_IF_COPYABLE(old_type)(v, old_var, (old_expr))</computeroutput> will always work.)</para>
 </listitem>
 </itemizedlist>
 <para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.extras.disable_contract_compilation__macro_interface_">
@@ -16080,28 +16329,28 @@ Disable Contract Compilation</link>). </para><synopsis xmlns:xi="http://www.w3.o
 </para></refsect1></refentry>
 <refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CONTRACT_INVARIANT"><refmeta><refentrytitle>Macro BOOST_CONTRACT_INVARIANT</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_INVARIANT</refname><refpurpose>Program (constant) class invariants that can be completely disabled at compile-time. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract_macro_hpp">boost/contract_macro.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_INVARIANT(...)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para><computeroutput>BOOST_CONTRACT_INVARIANT</computeroutput>({ ... }) expands to code equivalent to the following (note that no code is generated when  <computeroutput><link linkend="BOOST_CO_idm45123870477472">BOOST_CONTRACT_NO_INVARIANTS</link></computeroutput> is defined):</para><para><programlisting><phrase role="preprocessor">#ifndef</phrase> <phrase role="identifier">BOOST_CONTRACT_NO_INVARIANTS</phrase>
+</phrase>BOOST_CONTRACT_INVARIANT(...)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para><computeroutput>BOOST_CONTRACT_INVARIANT</computeroutput>({ ... }) expands to code equivalent to the following (note that no code is generated when  <computeroutput><link linkend="BOOST_CO_idm45394999622032">BOOST_CONTRACT_NO_INVARIANTS</link></computeroutput> is defined):</para><para><programlisting><phrase role="preprocessor">#ifndef</phrase> <phrase role="identifier">BOOST_CONTRACT_NO_INVARIANTS</phrase>
     <phrase role="keyword">void</phrase> <phrase role="identifier">BOOST_CONTRACT_INVARIANT_FUNC</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase> <phrase role="special">{</phrase>
         <phrase role="special">...</phrase>
     <phrase role="special">}</phrase>
 <phrase role="preprocessor">#endif</phrase>
 </programlisting></para><para>Where:</para><para><itemizedlist>
-<listitem><para><emphasis role="bold">{ ... }</emphasis> is the definition of the function that checks class invariants for public functions that are not static and not volatile (see <computeroutput><link linkend="BOOST_CO_idm45123869498768">BOOST_CONTRACT_STATIC_INVARIANT</link></computeroutput> and  <computeroutput><link linkend="BOOST_CO_idm45123869512624">BOOST_CONTRACT_INVARIANT_VOLATILE</link></computeroutput>). The curly parenthesis are mandatory. Assertions within this function are usually programmed using  <computeroutput><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput>, but any exception thrown by a call to this function indicates a contract assertion failure (and will result in this library calling either  <computeroutput><link linkend="boost.contract.entry_invariant_failure">boost::contract::entry_invariant_failure</link></computeroutput> or  <computeroutput><link linkend="boost.contract.exit_invariant_failure">boost::contract::exit_invariant_failure</link></computeroutput>). (This is a variadic macro parameter so it can contain commas not protected by round parenthesis.)</para>
+<listitem><para><emphasis role="bold">{ ... }</emphasis> is the definition of the function that checks class invariants for public functions that are not static and not volatile (see <computeroutput><link linkend="BOOST_CO_idm45394998621472">BOOST_CONTRACT_STATIC_INVARIANT</link></computeroutput> and  <computeroutput><link linkend="BOOST_CO_idm45394998635328">BOOST_CONTRACT_INVARIANT_VOLATILE</link></computeroutput>). The curly parenthesis are mandatory (rationale: this is so the syntax of this macro resembles mote the syntax of the lambda functions usually used to specify preconditions, etc.). Assertions within this function are usually programmed using  <computeroutput><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput>, but any exception thrown by a call to this function indicates a contract assertion failure (and will result in this library calling either  <computeroutput><link linkend="boost.contract.entry_invariant_failure">boost::contract::entry_invariant_failure</link></computeroutput> or  <computeroutput><link linkend="boost.contract.exit_invariant_failure">boost::contract::exit_invariant_failure</link></computeroutput>). (This is a variadic macro parameter so it can contain commas not protected by round parenthesis.)</para>
 </listitem>
 </itemizedlist>
 <para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.extras.disable_contract_compilation__macro_interface_">
         Disable Contract Compilation</link>,  <link linkend="boost_contract.tutorial.class_invariants"> Class Invariants</link> </para>
 </para>
 </para></refsect1></refentry>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45123869512624"><refmeta><refentrytitle>Macro BOOST_CONTRACT_INVARIANT_VOLATILE</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_INVARIANT_VOLATILE</refname><refpurpose>Program volatile class invariants that can be completely disabled at compile-time. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract_macro_hpp">boost/contract_macro.hpp</link>&gt;
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45394998635328"><refmeta><refentrytitle>Macro BOOST_CONTRACT_INVARIANT_VOLATILE</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_INVARIANT_VOLATILE</refname><refpurpose>Program volatile class invariants that can be completely disabled at compile-time. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract_macro_hpp">boost/contract_macro.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_INVARIANT_VOLATILE(...)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para><computeroutput>BOOST_CONTRACT_INVARIANT_VOLATILE</computeroutput>({ ... }) expands to code equivalent to the following (note that no code is generated when  <computeroutput><link linkend="BOOST_CO_idm45123870477472">BOOST_CONTRACT_NO_INVARIANTS</link></computeroutput> is defined):</para><para><programlisting><phrase role="preprocessor">#ifndef</phrase> <phrase role="identifier">BOOST_CONTRACT_NO_INVARIANTS</phrase>
+</phrase>BOOST_CONTRACT_INVARIANT_VOLATILE(...)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para><computeroutput>BOOST_CONTRACT_INVARIANT_VOLATILE</computeroutput>({ ... }) expands to code equivalent to the following (note that no code is generated when  <computeroutput><link linkend="BOOST_CO_idm45394999622032">BOOST_CONTRACT_NO_INVARIANTS</link></computeroutput> is defined):</para><para><programlisting><phrase role="preprocessor">#ifndef</phrase> <phrase role="identifier">BOOST_CONTRACT_NO_INVARIANTS</phrase>
     <phrase role="keyword">void</phrase> <phrase role="identifier">BOOST_CONTRACT_INVARIANT_FUNC</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="keyword">const</phrase> <phrase role="keyword">volatile</phrase> <phrase role="special">{</phrase>
         <phrase role="special">...</phrase>
     <phrase role="special">}</phrase>
 <phrase role="preprocessor">#endif</phrase>
 </programlisting></para><para>Where:</para><para><itemizedlist>
-<listitem><para><emphasis role="bold">{ ... }</emphasis> is the definition of the function that checks class invariants for volatile public functions (see <computeroutput><link linkend="BOOST_CONTRACT_INVARIANT">BOOST_CONTRACT_INVARIANT</link></computeroutput> and  <computeroutput><link linkend="BOOST_CO_idm45123869498768">BOOST_CONTRACT_STATIC_INVARIANT</link></computeroutput>). The curly parenthesis are mandatory. Assertions within this function are usually programmed using  <computeroutput><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput>, but any exception thrown by a call to this function indicates a contract assertion failure (and will result in this library calling either  <computeroutput><link linkend="boost.contract.entry_invariant_failure">boost::contract::entry_invariant_failure</link></computeroutput> or  <computeroutput><link linkend="boost.contract.exit_invariant_failure">boost::contract::exit_invariant_failure</link></computeroutput>). (This is a variadic macro parameter so it can contain commas not protected by round parenthesis.)</para>
+<listitem><para><emphasis role="bold">{ ... }</emphasis> is the definition of the function that checks class invariants for volatile public functions (see <computeroutput><link linkend="BOOST_CONTRACT_INVARIANT">BOOST_CONTRACT_INVARIANT</link></computeroutput> and  <computeroutput><link linkend="BOOST_CO_idm45394998621472">BOOST_CONTRACT_STATIC_INVARIANT</link></computeroutput>). The curly parenthesis are mandatory. Assertions within this function are usually programmed using  <computeroutput><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput>, but any exception thrown by a call to this function indicates a contract assertion failure (and will result in this library calling either  <computeroutput><link linkend="boost.contract.entry_invariant_failure">boost::contract::entry_invariant_failure</link></computeroutput> or  <computeroutput><link linkend="boost.contract.exit_invariant_failure">boost::contract::exit_invariant_failure</link></computeroutput>). (This is a variadic macro parameter so it can contain commas not protected by round parenthesis.)</para>
 </listitem>
 </itemizedlist>
 <para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.extras.disable_contract_compilation__macro_interface_">
@@ -16109,15 +16358,15 @@ Disable Contract Compilation</link>). </para><synopsis xmlns:xi="http://www.w3.o
         Volatile Public Functions</link> </para>
 </para>
 </para></refsect1></refentry>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45123869498768"><refmeta><refentrytitle>Macro BOOST_CONTRACT_STATIC_INVARIANT</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_STATIC_INVARIANT</refname><refpurpose>Program static class invariants that can be completely disabled at compile-time. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract_macro_hpp">boost/contract_macro.hpp</link>&gt;
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45394998621472"><refmeta><refentrytitle>Macro BOOST_CONTRACT_STATIC_INVARIANT</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_STATIC_INVARIANT</refname><refpurpose>Program static class invariants that can be completely disabled at compile-time. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract_macro_hpp">boost/contract_macro.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_STATIC_INVARIANT(...)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para><computeroutput>BOOST_CONTRACT_STATIC_INVARIANT</computeroutput>({ ... }) expands to code equivalent to the following (note that no code is generated when  <computeroutput><link linkend="BOOST_CO_idm45123870477472">BOOST_CONTRACT_NO_INVARIANTS</link></computeroutput> is defined):</para><para><programlisting><phrase role="preprocessor">#ifndef</phrase> <phrase role="identifier">BOOST_CONTRACT_NO_INVARIANTS</phrase>
+</phrase>BOOST_CONTRACT_STATIC_INVARIANT(...)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para><computeroutput>BOOST_CONTRACT_STATIC_INVARIANT</computeroutput>({ ... }) expands to code equivalent to the following (note that no code is generated when  <computeroutput><link linkend="BOOST_CO_idm45394999622032">BOOST_CONTRACT_NO_INVARIANTS</link></computeroutput> is defined):</para><para><programlisting><phrase role="preprocessor">#ifndef</phrase> <phrase role="identifier">BOOST_CONTRACT_NO_INVARIANTS</phrase>
     <phrase role="keyword">static</phrase> <phrase role="keyword">void</phrase> <phrase role="identifier">BOOST_CONTRACT_STATIC_INVARIANT_FUNC</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase> <phrase role="special">{</phrase>
         <phrase role="special">...</phrase>
     <phrase role="special">}</phrase>
 <phrase role="preprocessor">#endif</phrase>
 </programlisting></para><para>Where:</para><para><itemizedlist>
-<listitem><para><emphasis role="bold">{ ... }</emphasis> is the definition of the function that checks class invariants for static public functions (see <computeroutput><link linkend="BOOST_CONTRACT_INVARIANT">BOOST_CONTRACT_INVARIANT</link></computeroutput> and  <computeroutput><link linkend="BOOST_CO_idm45123869512624">BOOST_CONTRACT_INVARIANT_VOLATILE</link></computeroutput>). The curly parenthesis are mandatory. Assertions within this function are usually programmed using  <computeroutput><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput>, but any exception thrown by a call to this function indicates a contract assertion failure (and will result in this library calling either  <computeroutput><link linkend="boost.contract.entry_invariant_failure">boost::contract::entry_invariant_failure</link></computeroutput> or  <computeroutput><link linkend="boost.contract.exit_invariant_failure">boost::contract::exit_invariant_failure</link></computeroutput>). (This is a variadic macro parameter so it can contain commas not protected by round parenthesis.)</para>
+<listitem><para><emphasis role="bold">{ ... }</emphasis> is the definition of the function that checks class invariants for static public functions (see <computeroutput><link linkend="BOOST_CONTRACT_INVARIANT">BOOST_CONTRACT_INVARIANT</link></computeroutput> and  <computeroutput><link linkend="BOOST_CO_idm45394998635328">BOOST_CONTRACT_INVARIANT_VOLATILE</link></computeroutput>). The curly parenthesis are mandatory. Assertions within this function are usually programmed using  <computeroutput><link linkend="BOOST_CONTRACT_ASSERT">BOOST_CONTRACT_ASSERT</link></computeroutput>, but any exception thrown by a call to this function indicates a contract assertion failure (and will result in this library calling either  <computeroutput><link linkend="boost.contract.entry_invariant_failure">boost::contract::entry_invariant_failure</link></computeroutput> or  <computeroutput><link linkend="boost.contract.exit_invariant_failure">boost::contract::exit_invariant_failure</link></computeroutput>). (This is a variadic macro parameter so it can contain commas not protected by round parenthesis.)</para>
 </listitem>
 </itemizedlist>
 <para><emphasis role="bold">See Also:</emphasis><para> <link linkend="boost_contract.extras.disable_contract_compilation__macro_interface_">
@@ -16126,7 +16375,7 @@ Disable Contract Compilation</link>). </para><synopsis xmlns:xi="http://www.w3.o
 </para></refsect1></refentry>
 <refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CONTRACT_CONSTRUCTOR"><refmeta><refentrytitle>Macro BOOST_CONTRACT_CONSTRUCTOR</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_CONSTRUCTOR</refname><refpurpose>Program contracts that can be completely disabled at compile-time for constructors. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract_macro_hpp">boost/contract_macro.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_CONSTRUCTOR(...)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is used together with <computeroutput><link linkend="BOOST_CO_idm45123869611056">BOOST_CONTRACT_POSTCONDITION</link></computeroutput>,  <computeroutput><link linkend="BOOST_CONTRACT_EXCEPT">BOOST_CONTRACT_EXCEPT</link></computeroutput>, and <computeroutput><link linkend="BOOST_CONTRACT_OLD">BOOST_CONTRACT_OLD</link></computeroutput> to specify postconditions, exception guarantees, and old value copies at body that can be completely disabled at compile-time for constructors (see  <computeroutput><link linkend="BOOST_CO_idm45123869465008">BOOST_CONTRACT_CONSTRUCTOR_PRECONDITION</link></computeroutput> to specify preconditions for constructors):</para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase> <phrase role="special">{</phrase>
+</phrase>BOOST_CONTRACT_CONSTRUCTOR(...)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is used together with <computeroutput><link linkend="BOOST_CO_idm45394998736528">BOOST_CONTRACT_POSTCONDITION</link></computeroutput>,  <computeroutput><link linkend="BOOST_CONTRACT_EXCEPT">BOOST_CONTRACT_EXCEPT</link></computeroutput>, and <computeroutput><link linkend="BOOST_CONTRACT_OLD">BOOST_CONTRACT_OLD</link></computeroutput> to specify postconditions, exception guarantees, and old value copies at body that can be completely disabled at compile-time for constructors (see  <computeroutput><link linkend="BOOST_CO_idm45394998587680">BOOST_CONTRACT_CONSTRUCTOR_PRECONDITION</link></computeroutput> to specify preconditions for constructors):</para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase> <phrase role="special">{</phrase>
     <phrase role="keyword">friend</phrase> <phrase role="keyword">class</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">access</phrase><phrase role="special">;</phrase>
 
     <phrase role="identifier">BOOST_CONTRACT_INVARIANT</phrase><phrase role="special">(</phrase><phrase role="special">{</phrase> <phrase role="comment">// Optional (as for static and volatile).</phrase>
@@ -16151,19 +16400,19 @@ Disable Contract Compilation</link>). </para><synopsis xmlns:xi="http://www.w3.o
                 <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="special">...</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
                 <phrase role="special">...</phrase>
             <phrase role="special">}</phrase><phrase role="special">)</phrase>
-        <phrase role="special">;</phrase>
+        <phrase role="special">;</phrase> <phrase role="comment">// Trailing `;` is required.</phrase>
 
         <phrase role="special">...</phrase> <phrase role="comment">// Constructor body.</phrase>
     <phrase role="special">}</phrase>
 
     <phrase role="special">...</phrase>
 <phrase role="special">}</phrase><phrase role="special">;</phrase>
-</programlisting></para><para>For optimization, this can be omitted for constructors that do not have postconditions and exception guarantees, within classes that have no invariants.</para><para><computeroutput>BOOST_CONTRACT_CONSTRUCTOR(obj)</computeroutput> expands to code equivalent to the following (note that no code is generated when  <computeroutput><link linkend="BOOST_CO_idm45123870460880">BOOST_CONTRACT_NO_CONSTRUCTORS</link></computeroutput> is defined):</para><para><programlisting><phrase role="preprocessor">#ifndef</phrase> <phrase role="identifier">BOOST_CONTRACT_NO_CONSTRUCTORS</phrase>
+</programlisting></para><para>For optimization, this can be omitted for constructors that do not have postconditions and exception guarantees, within classes that have no invariants.</para><para><computeroutput>BOOST_CONTRACT_CONSTRUCTOR(obj)</computeroutput> expands to code equivalent to the following (note that no code is generated when  <computeroutput><link linkend="BOOST_CO_idm45394999605408">BOOST_CONTRACT_NO_CONSTRUCTORS</link></computeroutput> is defined):</para><para><programlisting><phrase role="preprocessor">#ifndef</phrase> <phrase role="identifier">BOOST_CONTRACT_NO_CONSTRUCTORS</phrase>
     <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">check</phrase> <phrase role="identifier">internal_var</phrase> <phrase role="special">=</phrase>
             <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">constructor</phrase><phrase role="special">(</phrase><phrase role="identifier">obj</phrase><phrase role="special">)</phrase>
 <phrase role="preprocessor">#endif</phrase>
 </programlisting></para><para>Where:</para><para><itemizedlist>
-<listitem><para><computeroutput><emphasis role="bold">obj</emphasis></computeroutput> is the object <computeroutput>this</computeroutput> from the scope of the enclosing constructor declaring the contract. Constructors check all class invariants, including static and volatile invariants (see <computeroutput><link linkend="BOOST_CONTRACT_INVARIANT">BOOST_CONTRACT_INVARIANT</link></computeroutput>,  <computeroutput><link linkend="BOOST_CO_idm45123869498768">BOOST_CONTRACT_STATIC_INVARIANT</link></computeroutput>, and  <computeroutput><link linkend="BOOST_CO_idm45123869512624">BOOST_CONTRACT_INVARIANT_VOLATILE</link></computeroutput>). (This is a variadic macro parameter so it can contain commas not protected by round parenthesis.) </para>
+<listitem><para><computeroutput><emphasis role="bold">obj</emphasis></computeroutput> is the object <computeroutput>this</computeroutput> from the scope of the enclosing constructor declaring the contract. Constructors check all class invariants, including static and volatile invariants (see <computeroutput><link linkend="BOOST_CONTRACT_INVARIANT">BOOST_CONTRACT_INVARIANT</link></computeroutput>,  <computeroutput><link linkend="BOOST_CO_idm45394998621472">BOOST_CONTRACT_STATIC_INVARIANT</link></computeroutput>, and  <computeroutput><link linkend="BOOST_CO_idm45394998635328">BOOST_CONTRACT_INVARIANT_VOLATILE</link></computeroutput>). (This is a variadic macro parameter so it can contain commas not protected by round parenthesis.) </para>
 </listitem>
 <listitem><para><computeroutput><emphasis role="bold">internal_var</emphasis></computeroutput> is a variable name internally generated by this library (this name is unique but only on different line numbers so this macro cannot be expanded multiple times on the same line).</para>
 </listitem>
@@ -16172,34 +16421,37 @@ Disable Contract Compilation</link>). </para><synopsis xmlns:xi="http://www.w3.o
         Disable Contract Compilation</link>,  <link linkend="boost_contract.tutorial.constructors"> Constructors</link> </para>
 </para>
 </para></refsect1></refentry>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45123869465008"><refmeta><refentrytitle>Macro BOOST_CONTRACT_CONSTRUCTOR_PRECONDITION</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_CONSTRUCTOR_PRECONDITION</refname><refpurpose>Program preconditions that can be disabled at compile-time for constructors. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract_macro_hpp">boost/contract_macro.hpp</link>&gt;
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45394998587680"><refmeta><refentrytitle>Macro BOOST_CONTRACT_CONSTRUCTOR_PRECONDITION</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_CONSTRUCTOR_PRECONDITION</refname><refpurpose>Program preconditions that can be disabled at compile-time for constructors. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract_macro_hpp">boost/contract_macro.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_CONSTRUCTOR_PRECONDITION(...)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is used together with <computeroutput><link linkend="BOOST_CONTRACT_CONSTRUCTOR">BOOST_CONTRACT_CONSTRUCTOR</link></computeroutput> to specify contracts for constructors. Constructors that do not have preconditions do not use this macro. When at least one of the class constructors uses this macro,  <computeroutput><link linkend="boost.contract.constructor_precondition">boost::contract::constructor_precondition</link></computeroutput> must be the first and private base class of the class declaring the constructor for which preconditions are programmed:</para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase>
+</phrase>BOOST_CONTRACT_CONSTRUCTOR_PRECONDITION(...)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is used together with <computeroutput><link linkend="BOOST_CONTRACT_CONSTRUCTOR">BOOST_CONTRACT_CONSTRUCTOR</link></computeroutput> to specify contracts for constructors. Constructors that do not have preconditions do not use this macro. When at least one of the class constructors uses this macro,  <computeroutput><link linkend="boost.contract.constructor_precondition">boost::contract::constructor_precondition</link></computeroutput> must be the first and private base of the class declaring the constructor for which preconditions are programmed:</para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase>
     <phrase role="preprocessor">#define</phrase> <phrase role="identifier">BASES</phrase> <phrase role="keyword">private</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">constructor_precondition</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">u</phrase><phrase role="special">&gt;</phrase><phrase role="special">,</phrase> \
             <phrase role="keyword">public</phrase> <phrase role="identifier">b</phrase>
     <phrase role="special">:</phrase> <phrase role="identifier">BASES</phrase>
 <phrase role="special">{</phrase>
-    <phrase role="special">...</phrase>
+    <phrase role="keyword">friend</phrase> <phrase role="keyword">class</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">access</phrase><phrase role="special">;</phrase>
+
+    <phrase role="keyword">typedef</phrase> <phrase role="identifier">BOOST_CONTRACT_BASE_TYPES</phrase><phrase role="special">(</phrase><phrase role="identifier">BASES</phrase><phrase role="special">)</phrase> <phrase role="identifier">base_types</phrase><phrase role="special">;</phrase>
     <phrase role="preprocessor">#undef</phrase> <phrase role="identifier">BASES</phrase>
 
+    <phrase role="special">...</phrase>
+
 <phrase role="keyword">public</phrase><phrase role="special">:</phrase>
     <phrase role="keyword">explicit</phrase> <phrase role="identifier">u</phrase><phrase role="special">(</phrase><phrase role="keyword">unsigned</phrase> <phrase role="identifier">x</phrase><phrase role="special">)</phrase> <phrase role="special">:</phrase>
         <phrase role="identifier">BOOST_CONTRACT_CONSTRUCTOR_PRECONDITION</phrase><phrase role="special">(</phrase><phrase role="identifier">u</phrase><phrase role="special">)</phrase><phrase role="special">(</phrase><phrase role="special">[</phrase><phrase role="special">&amp;</phrase><phrase role="special">]</phrase> <phrase role="special">{</phrase>
             <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="identifier">x</phrase> <phrase role="special">!=</phrase> <phrase role="number">0</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
         <phrase role="special">}</phrase><phrase role="special">)</phrase><phrase role="special">,</phrase>
-        <phrase role="identifier">b</phrase><phrase role="special">(</phrase><phrase role="number">1</phrase><phrase role="special">.</phrase><phrase role="number">0</phrase> <phrase role="special">/</phrase> <phrase role="keyword">float</phrase><phrase role="special">(</phrase><phrase role="identifier">x</phrase><phrase role="special">)</phrase><phrase role="special">)</phrase>
+        <phrase role="identifier">b</phrase><phrase role="special">(</phrase><phrase role="number">1</phrase> <phrase role="special">/</phrase> <phrase role="identifier">x</phrase><phrase role="special">)</phrase>
     <phrase role="special">{</phrase>
         <phrase role="special">...</phrase>
     <phrase role="special">}</phrase>
 
     <phrase role="special">...</phrase>
 <phrase role="special">}</phrase><phrase role="special">;</phrase>
-</programlisting></para><para><computeroutput>BOOST_CONTRACT_CONSTRUCTOR_PRECONDITION(class_type)(f)</computeroutput> expands to code equivalent to the following (note that when  <computeroutput><link linkend="BOOST_CO_idm45123870517808">BOOST_CONTRACT_NO_PRECONDITIONS</link></computeroutput> is defined, this macro trivially expands to a default constructor call that is internally implemented to do nothing so this should have minimal to no overhead):</para><para><programlisting><phrase role="comment">// Guarded only by NO_PRECONDITIONS (and not also by NO_CONSTRUCTORS)</phrase>
+</programlisting></para><para><computeroutput>BOOST_CONTRACT_CONSTRUCTOR_PRECONDITION(class_type)(f)</computeroutput> expands to code equivalent to the following (note that when  <computeroutput><link linkend="BOOST_CO_idm45394999662416">BOOST_CONTRACT_NO_PRECONDITIONS</link></computeroutput> is defined, this macro trivially expands to a default constructor call that is internally implemented to do nothing so this should have minimal to no overhead):</para><para><programlisting><phrase role="comment">// Guarded only by NO_PRECONDITIONS (and not also by NO_CONSTRUCTORS)</phrase>
 <phrase role="comment">// because for constructor's preconditions (not for postconditions, etc.).</phrase>
 <phrase role="preprocessor">#ifndef</phrase> <phrase role="identifier">BOOST_CONTRACT_NO_PRECONDITIONS</phrase>
     <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">constructor_precondition</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">class_type</phrase><phrase role="special">&gt;</phrase><phrase role="special">(</phrase><phrase role="identifier">f</phrase><phrase role="special">)</phrase>
-<phrase role="preprocessor">#else</phrase>
-    <phrase role="comment">// No-op call (likely optimized away, minimal to no overhead).</phrase>
+<phrase role="preprocessor">#else</phrase> <phrase role="comment">// No-op call (likely optimized away, minimal to no overhead).</phrase>
     <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">constructor_precondition</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">class_type</phrase><phrase role="special">&gt;</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase>
 <phrase role="preprocessor">#endif</phrase>
 </programlisting></para><para>Where:</para><para><itemizedlist>
@@ -16214,7 +16466,7 @@ Disable Contract Compilation</link>). </para><synopsis xmlns:xi="http://www.w3.o
 </para></refsect1></refentry>
 <refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CONTRACT_DESTRUCTOR"><refmeta><refentrytitle>Macro BOOST_CONTRACT_DESTRUCTOR</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_DESTRUCTOR</refname><refpurpose>Program contracts that can be completely disabled at compile-time for destructors. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract_macro_hpp">boost/contract_macro.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_DESTRUCTOR(...)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is used together with <computeroutput><link linkend="BOOST_CO_idm45123869611056">BOOST_CONTRACT_POSTCONDITION</link></computeroutput>,  <computeroutput><link linkend="BOOST_CONTRACT_EXCEPT">BOOST_CONTRACT_EXCEPT</link></computeroutput>, and <computeroutput><link linkend="BOOST_CONTRACT_OLD">BOOST_CONTRACT_OLD</link></computeroutput> to specify postconditions, exception guarantees, and old value copies at body that can be completely disabled at compile-time for destructors (destructors cannot have preconditions, see  <link linkend="boost_contract.contract_programming_overview.destructor_calls"> Destructor Calls</link>):</para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase> <phrase role="special">{</phrase>
+</phrase>BOOST_CONTRACT_DESTRUCTOR(...)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is used together with <computeroutput><link linkend="BOOST_CO_idm45394998736528">BOOST_CONTRACT_POSTCONDITION</link></computeroutput>,  <computeroutput><link linkend="BOOST_CONTRACT_EXCEPT">BOOST_CONTRACT_EXCEPT</link></computeroutput>, and <computeroutput><link linkend="BOOST_CONTRACT_OLD">BOOST_CONTRACT_OLD</link></computeroutput> to specify postconditions, exception guarantees, and old value copies at body that can be completely disabled at compile-time for destructors (destructors cannot have preconditions, see  <link linkend="boost_contract.contract_programming_overview.destructor_calls"> Destructor Calls</link>):</para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase> <phrase role="special">{</phrase>
     <phrase role="keyword">friend</phrase> <phrase role="keyword">class</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">access</phrase><phrase role="special">;</phrase>
 
     <phrase role="identifier">BOOST_CONTRACT_INVARIANT</phrase><phrase role="special">(</phrase><phrase role="special">{</phrase> <phrase role="comment">// Optional (as for static and volatile).</phrase>
@@ -16239,14 +16491,14 @@ Disable Contract Compilation</link>). </para><synopsis xmlns:xi="http://www.w3.o
                 <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="special">...</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
                 <phrase role="special">...</phrase>
             <phrase role="special">}</phrase><phrase role="special">)</phrase>
-        <phrase role="special">;</phrase>
+        <phrase role="special">;</phrase> <phrase role="comment">// Trailing `;` is required.</phrase>
 
         <phrase role="special">...</phrase> <phrase role="comment">// Destructor body.</phrase>
     <phrase role="special">}</phrase>
     
     <phrase role="special">...</phrase>
 <phrase role="special">}</phrase><phrase role="special">;</phrase>
-</programlisting></para><para>For optimization, this can be omitted for destructors that do not have postconditions and exception guarantees, within classes that have no invariants.</para><para><computeroutput>BOOST_CONTRACT_DESTRUCTOR(obj)</computeroutput> expands to code equivalent to the following (note that no code is generated when  <computeroutput><link linkend="BOOST_CO_idm45123870450032">BOOST_CONTRACT_NO_DESTRUCTORS</link></computeroutput> is defined):</para><para><programlisting><phrase role="preprocessor">#ifndef</phrase> <phrase role="identifier">BOOST_CONTRACT_NO_DESTRUCTORS</phrase>
+</programlisting></para><para>For optimization, this can be omitted for destructors that do not have postconditions and exception guarantees, within classes that have no invariants.</para><para><computeroutput>BOOST_CONTRACT_DESTRUCTOR(obj)</computeroutput> expands to code equivalent to the following (note that no code is generated when  <computeroutput><link linkend="BOOST_CO_idm45394999594544">BOOST_CONTRACT_NO_DESTRUCTORS</link></computeroutput> is defined):</para><para><programlisting><phrase role="preprocessor">#ifndef</phrase> <phrase role="identifier">BOOST_CONTRACT_NO_DESTRUCTORS</phrase>
     <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">check</phrase> <phrase role="identifier">internal_var</phrase> <phrase role="special">=</phrase>
             <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">destructor</phrase><phrase role="special">(</phrase><phrase role="identifier">obj</phrase><phrase role="special">)</phrase>
 <phrase role="preprocessor">#endif</phrase>
@@ -16264,7 +16516,7 @@ Disable Contract Compilation</link>). </para><synopsis xmlns:xi="http://www.w3.o
 </para></refsect1></refentry>
 <refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CONTRACT_FUNCTION"><refmeta><refentrytitle>Macro BOOST_CONTRACT_FUNCTION</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_FUNCTION</refname><refpurpose>Program contracts that can be completely disabled at compile-time for (non-public) functions. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract_macro_hpp">boost/contract_macro.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_FUNCTION()</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is used together with <computeroutput><link linkend="BOOST_CO_idm45123869622736">BOOST_CONTRACT_PRECONDITION</link></computeroutput>,  <computeroutput><link linkend="BOOST_CO_idm45123869611056">BOOST_CONTRACT_POSTCONDITION</link></computeroutput>, <computeroutput><link linkend="BOOST_CONTRACT_EXCEPT">BOOST_CONTRACT_EXCEPT</link></computeroutput>, and <computeroutput><link linkend="BOOST_CONTRACT_OLD">BOOST_CONTRACT_OLD</link></computeroutput> to specify preconditions, postconditions, exception guarantees, and old value copies at body that can be completely disabled at compile-time for (non-public) functions:</para><para><programlisting><phrase role="keyword">void</phrase> <phrase role="identifier">f</phrase><phrase role="special">(</phrase><phrase role="special">...</phrase><phrase role="special">)</phrase> <phrase role="special">{</phrase>
+</phrase>BOOST_CONTRACT_FUNCTION()</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is used together with <computeroutput><link linkend="BOOST_CO_idm45394998748208">BOOST_CONTRACT_PRECONDITION</link></computeroutput>,  <computeroutput><link linkend="BOOST_CO_idm45394998736528">BOOST_CONTRACT_POSTCONDITION</link></computeroutput>, <computeroutput><link linkend="BOOST_CONTRACT_EXCEPT">BOOST_CONTRACT_EXCEPT</link></computeroutput>, and <computeroutput><link linkend="BOOST_CONTRACT_OLD">BOOST_CONTRACT_OLD</link></computeroutput> to specify preconditions, postconditions, exception guarantees, and old value copies at body that can be completely disabled at compile-time for (non-public) functions:</para><para><programlisting><phrase role="keyword">void</phrase> <phrase role="identifier">f</phrase><phrase role="special">(</phrase><phrase role="special">...</phrase><phrase role="special">)</phrase> <phrase role="special">{</phrase>
     <phrase role="identifier">BOOST_CONTRACT_OLD_PTR</phrase><phrase role="special">(</phrase><phrase role="identifier">old_type</phrase><phrase role="special">)</phrase><phrase role="special">(</phrase><phrase role="identifier">old_var</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
     <phrase role="identifier">BOOST_CONTRACT_FUNCTION</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase>
         <phrase role="identifier">BOOST_CONTRACT_PRECONDITION</phrase><phrase role="special">(</phrase><phrase role="special">[</phrase><phrase role="special">&amp;</phrase><phrase role="special">]</phrase> <phrase role="special">{</phrase> <phrase role="comment">// Optional.</phrase>
@@ -16283,11 +16535,11 @@ Disable Contract Compilation</link>). </para><synopsis xmlns:xi="http://www.w3.o
             <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="special">...</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
             <phrase role="special">...</phrase>
         <phrase role="special">}</phrase><phrase role="special">)</phrase>
-    <phrase role="special">;</phrase>
+    <phrase role="special">;</phrase> <phrase role="comment">// Trailing `;` is required.</phrase>
 
     <phrase role="special">...</phrase> <phrase role="comment">// Function body.</phrase>
 <phrase role="special">}</phrase>
-</programlisting></para><para>This can be used to program contracts for non-member functions but also for private and protected functions, lambda functions, loops, arbitrary blocks of code, etc. For optimization, this can be omitted for code that does not have preconditions, postconditions, and exception guarantees.</para><para><computeroutput>BOOST_CONTRACT_FUNCTION()</computeroutput> expands to code equivalent to the following (note that no code is generated when <computeroutput><link linkend="BOOST_CO_idm45123870432592">BOOST_CONTRACT_NO_FUNCTIONS</link></computeroutput> is defined):</para><para><programlisting><phrase role="preprocessor">#ifndef</phrase> <phrase role="identifier">BOOST_CONTRACT_NO_FUNCTIONS</phrase>
+</programlisting></para><para>This can be used to program contracts for non-member functions but also for private and protected functions, lambda functions, loops, arbitrary blocks of code, etc. For optimization, this can be omitted for code that does not have preconditions, postconditions, and exception guarantees.</para><para><computeroutput>BOOST_CONTRACT_FUNCTION()</computeroutput> expands to code equivalent to the following (note that no code is generated when <computeroutput><link linkend="BOOST_CO_idm45394999577072">BOOST_CONTRACT_NO_FUNCTIONS</link></computeroutput> is defined):</para><para><programlisting><phrase role="preprocessor">#ifndef</phrase> <phrase role="identifier">BOOST_CONTRACT_NO_FUNCTIONS</phrase>
     <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">check</phrase> <phrase role="identifier">internal_var</phrase> <phrase role="special">=</phrase>
             <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">function</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase>
 <phrase role="preprocessor">#endif</phrase>
@@ -16301,9 +16553,9 @@ Disable Contract Compilation</link>). </para><synopsis xmlns:xi="http://www.w3.o
         Lambdas, Loops, Code Blocks</link> </para>
 </para>
 </para></refsect1></refentry>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45123869412432"><refmeta><refentrytitle>Macro BOOST_CONTRACT_STATIC_PUBLIC_FUNCTION</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_STATIC_PUBLIC_FUNCTION</refname><refpurpose>Program contracts that can be completely disabled at compile-time for static public functions. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract_macro_hpp">boost/contract_macro.hpp</link>&gt;
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45394998534992"><refmeta><refentrytitle>Macro BOOST_CONTRACT_STATIC_PUBLIC_FUNCTION</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_STATIC_PUBLIC_FUNCTION</refname><refpurpose>Program contracts that can be completely disabled at compile-time for static public functions. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract_macro_hpp">boost/contract_macro.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_STATIC_PUBLIC_FUNCTION(...)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is used together with <computeroutput><link linkend="BOOST_CO_idm45123869622736">BOOST_CONTRACT_PRECONDITION</link></computeroutput>,  <computeroutput><link linkend="BOOST_CO_idm45123869611056">BOOST_CONTRACT_POSTCONDITION</link></computeroutput>, <computeroutput><link linkend="BOOST_CONTRACT_EXCEPT">BOOST_CONTRACT_EXCEPT</link></computeroutput>, and <computeroutput><link linkend="BOOST_CONTRACT_OLD">BOOST_CONTRACT_OLD</link></computeroutput> to specify preconditions, postconditions, exception guarantees, and old value copies at body that can be completely disabled at compile-time for static public functions:</para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase> <phrase role="special">{</phrase>
+</phrase>BOOST_CONTRACT_STATIC_PUBLIC_FUNCTION(...)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is used together with <computeroutput><link linkend="BOOST_CO_idm45394998748208">BOOST_CONTRACT_PRECONDITION</link></computeroutput>,  <computeroutput><link linkend="BOOST_CO_idm45394998736528">BOOST_CONTRACT_POSTCONDITION</link></computeroutput>, <computeroutput><link linkend="BOOST_CONTRACT_EXCEPT">BOOST_CONTRACT_EXCEPT</link></computeroutput>, and <computeroutput><link linkend="BOOST_CONTRACT_OLD">BOOST_CONTRACT_OLD</link></computeroutput> to specify preconditions, postconditions, exception guarantees, and old value copies at body that can be completely disabled at compile-time for static public functions:</para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase> <phrase role="special">{</phrase>
     <phrase role="keyword">friend</phrase> <phrase role="keyword">class</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">access</phrase><phrase role="special">;</phrase>
 
     <phrase role="identifier">BOOST_CONTRACT_STATIC_INVARIANT</phrase><phrase role="special">(</phrase><phrase role="special">{</phrase> <phrase role="comment">// Optional (as for non-static).</phrase>
@@ -16331,14 +16583,14 @@ Disable Contract Compilation</link>). </para><synopsis xmlns:xi="http://www.w3.o
                 <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="special">...</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
                 <phrase role="special">...</phrase>
             <phrase role="special">}</phrase><phrase role="special">)</phrase>
-        <phrase role="special">;</phrase>
+        <phrase role="special">;</phrase> <phrase role="comment">// Trailing `;` is required.</phrase>
 
         <phrase role="special">...</phrase> <phrase role="comment">// Function body.</phrase>
     <phrase role="special">}</phrase>
     
     <phrase role="special">...</phrase>
 <phrase role="special">}</phrase><phrase role="special">;</phrase>
-</programlisting></para><para>For optimization, this can be omitted for static public functions that do not have preconditions, postconditions and exception guarantees, within classes that have no static invariants.</para><para><computeroutput>BOOST_CONTRACT_STATIC_PUBLIC_FUNCTION(class_type)</computeroutput> expands to code equivalent to the following (note that no code is generated when  <computeroutput><link linkend="BOOST_CO_idm45123870441776">BOOST_CONTRACT_NO_PUBLIC_FUNCTIONS</link></computeroutput> is defined):</para><para><programlisting><phrase role="preprocessor">#ifndef</phrase> <phrase role="identifier">BOOST_CONTRACT_NO_PUBLIC_FUNCTIONS</phrase>
+</programlisting></para><para>For optimization, this can be omitted for static public functions that do not have preconditions, postconditions and exception guarantees, within classes that have no static invariants.</para><para><computeroutput>BOOST_CONTRACT_STATIC_PUBLIC_FUNCTION(class_type)</computeroutput> expands to code equivalent to the following (note that no code is generated when  <computeroutput><link linkend="BOOST_CO_idm45394999586272">BOOST_CONTRACT_NO_PUBLIC_FUNCTIONS</link></computeroutput> is defined):</para><para><programlisting><phrase role="preprocessor">#ifndef</phrase> <phrase role="identifier">BOOST_CONTRACT_NO_PUBLIC_FUNCTIONS</phrase>
     <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">check</phrase> <phrase role="identifier">internal_var</phrase> <phrase role="special">=</phrase>
             <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">public_function</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">class_type</phrase><phrase role="special">&gt;</phrase><phrase role="special">(</phrase><phrase role="special">)</phrase>
 <phrase role="preprocessor">#endif</phrase>
@@ -16352,9 +16604,9 @@ Disable Contract Compilation</link>). </para><synopsis xmlns:xi="http://www.w3.o
         Disable Contract Compilation</link>,  <link linkend="boost_contract.tutorial.static_public_functions"> Static Public Functions</link> </para>
 </para>
 </para></refsect1></refentry>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45123869395440"><refmeta><refentrytitle>Macro BOOST_CONTRACT_PUBLIC_FUNCTION</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_PUBLIC_FUNCTION</refname><refpurpose>Program contracts that can be completely disabled at compile-time for non-static public functions that do not override. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract_macro_hpp">boost/contract_macro.hpp</link>&gt;
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45394998517984"><refmeta><refentrytitle>Macro BOOST_CONTRACT_PUBLIC_FUNCTION</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_PUBLIC_FUNCTION</refname><refpurpose>Program contracts that can be completely disabled at compile-time for non-static public functions that do not override. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract_macro_hpp">boost/contract_macro.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_PUBLIC_FUNCTION(...)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is used together with <computeroutput><link linkend="BOOST_CO_idm45123869622736">BOOST_CONTRACT_PRECONDITION</link></computeroutput>,  <computeroutput><link linkend="BOOST_CO_idm45123869611056">BOOST_CONTRACT_POSTCONDITION</link></computeroutput>, <computeroutput><link linkend="BOOST_CONTRACT_EXCEPT">BOOST_CONTRACT_EXCEPT</link></computeroutput>, and <computeroutput><link linkend="BOOST_CONTRACT_OLD">BOOST_CONTRACT_OLD</link></computeroutput> to specify preconditions, postconditions, exception guarantees, and old value copies at body that can be completely disabled at compile-time for non-static public functions (virtual or not, void or not) that do not override:</para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase> <phrase role="special">{</phrase>
+</phrase>BOOST_CONTRACT_PUBLIC_FUNCTION(...)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is used together with <computeroutput><link linkend="BOOST_CO_idm45394998748208">BOOST_CONTRACT_PRECONDITION</link></computeroutput>,  <computeroutput><link linkend="BOOST_CO_idm45394998736528">BOOST_CONTRACT_POSTCONDITION</link></computeroutput>, <computeroutput><link linkend="BOOST_CONTRACT_EXCEPT">BOOST_CONTRACT_EXCEPT</link></computeroutput>, and <computeroutput><link linkend="BOOST_CONTRACT_OLD">BOOST_CONTRACT_OLD</link></computeroutput> to specify preconditions, postconditions, exception guarantees, and old value copies at body that can be completely disabled at compile-time for non-static public functions (virtual or not, void or not) that do not override:</para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase> <phrase role="special">{</phrase>
     <phrase role="keyword">friend</phrase> <phrase role="keyword">class</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">access</phrase><phrase role="special">;</phrase>
 
     <phrase role="identifier">BOOST_CONTRACT_INVARIANT</phrase><phrase role="special">(</phrase><phrase role="special">{</phrase> <phrase role="comment">// Optional (as for static and volatile).</phrase>
@@ -16384,7 +16636,7 @@ Disable Contract Compilation</link>). </para><synopsis xmlns:xi="http://www.w3.o
                 <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="special">...</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
                 <phrase role="special">...</phrase>
             <phrase role="special">}</phrase><phrase role="special">)</phrase>
-        <phrase role="special">;</phrase>
+        <phrase role="special">;</phrase> <phrase role="comment">// Trailing `;` is required.</phrase>
 
         <phrase role="special">...</phrase> <phrase role="comment">// Function body (use `return result = return_expr`).</phrase>
     <phrase role="special">}</phrase>
@@ -16399,7 +16651,7 @@ Disable Contract Compilation</link>). </para><synopsis xmlns:xi="http://www.w3.o
                 <phrase role="special">...</phrase>
             <phrase role="special">}</phrase><phrase role="special">)</phrase>
             <phrase role="special">...</phrase>
-        <phrase role="special">;</phrase>
+        <phrase role="special">;</phrase> <phrase role="comment">// Trailing `;` is required.</phrase>
         
         <phrase role="special">...</phrase> <phrase role="comment">// Function body.</phrase>
     <phrase role="special">}</phrase>
@@ -16419,22 +16671,22 @@ Disable Contract Compilation</link>). </para><synopsis xmlns:xi="http://www.w3.o
                 <phrase role="special">...</phrase>
             <phrase role="special">}</phrase><phrase role="special">)</phrase>
             <phrase role="special">...</phrase>
-        <phrase role="special">;</phrase>
+        <phrase role="special">;</phrase> <phrase role="comment">// Trailing `;` is required.</phrase>
         
         <phrase role="special">...</phrase> <phrase role="comment">// Function body (use `return result = return_expr`).</phrase>
     <phrase role="special">}</phrase>
     
     <phrase role="special">...</phrase>
 <phrase role="special">}</phrase><phrase role="special">;</phrase>
-</programlisting></para><para>For optimization, this can be omitted for non-virtual public functions that do not have preconditions, postconditions and exception guarantees, within classes that have no invariants. Virtual public functions should always use  <computeroutput><link linkend="BOOST_CO_idm45123869395440">BOOST_CONTRACT_PUBLIC_FUNCTION</link></computeroutput> otherwise this library will not be able to correctly use them for subcontracting.</para><para>This is an overloaded variadic macro and it can be used in the following different ways (note that no code is generated when  <computeroutput><link linkend="BOOST_CO_idm45123870441776">BOOST_CONTRACT_NO_PUBLIC_FUNCTIONS</link></computeroutput> is defined).</para><para>1. <computeroutput>BOOST_CONTRACT_PUBLIC_FUNCTION(obj)</computeroutput> expands to code equivalent to the following (for non-virtual public functions that are not static and do not override, returning void or not):</para><para><programlisting><phrase role="preprocessor">#ifndef</phrase> <phrase role="identifier">BOOST_CONTRACT_NO_PUBLIC_FUNCTIONS</phrase>
+</programlisting></para><para>For optimization, this can be omitted for non-virtual public functions that do not have preconditions, postconditions and exception guarantees, within classes that have no invariants. Virtual public functions should always use  <computeroutput><link linkend="BOOST_CO_idm45394998517984">BOOST_CONTRACT_PUBLIC_FUNCTION</link></computeroutput> otherwise this library will not be able to correctly use them for subcontracting.</para><para>This is an overloaded variadic macro and it can be used in the following different ways (note that no code is generated when  <computeroutput><link linkend="BOOST_CO_idm45394999586272">BOOST_CONTRACT_NO_PUBLIC_FUNCTIONS</link></computeroutput> is defined).</para><para>1. <computeroutput>BOOST_CONTRACT_PUBLIC_FUNCTION(obj)</computeroutput> expands to code equivalent to the following (for non-virtual public functions that are not static and do not override, returning void or not):</para><para><programlisting><phrase role="preprocessor">#ifndef</phrase> <phrase role="identifier">BOOST_CONTRACT_NO_PUBLIC_FUNCTIONS</phrase>
     <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">check</phrase> <phrase role="identifier">internal_var</phrase> <phrase role="special">=</phrase>
             <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">public_function</phrase><phrase role="special">(</phrase><phrase role="identifier">obj</phrase><phrase role="special">)</phrase>
 <phrase role="preprocessor">#endif</phrase>
-</programlisting></para><para>2. <computeroutput>BOOST_CONTRACT_PUBLIC_FUNCTION(v, obj)</computeroutput> expands to code equivalent to the following (for virtual public functions that are not static and do not override, returning void):</para><para><programlisting><phrase role="preprocessor">#ifndef</phrase> <phrase role="identifier">BOOST_CONTRACT_NO_PUBLIC_FUNCTIONS</phrase>
+</programlisting></para><para>2. <computeroutput>BOOST_CONTRACT_PUBLIC_FUNCTION(v, obj)</computeroutput> expands to code equivalent to the following (for virtual public functions that do not override, returning void):</para><para><programlisting><phrase role="preprocessor">#ifndef</phrase> <phrase role="identifier">BOOST_CONTRACT_NO_PUBLIC_FUNCTIONS</phrase>
     <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">check</phrase> <phrase role="identifier">internal_var</phrase> <phrase role="special">=</phrase>
             <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">public_function</phrase><phrase role="special">(</phrase><phrase role="identifier">v</phrase><phrase role="special">,</phrase> <phrase role="identifier">obj</phrase><phrase role="special">)</phrase>
 <phrase role="preprocessor">#endif</phrase>
-</programlisting></para><para>3. <computeroutput>BOOST_CONTRACT_PUBLIC_FUNCTION(v, r, obj)</computeroutput> expands to code equivalent to the following (for virtual public functions that are not static and do not override, not returning void):</para><para><programlisting><phrase role="preprocessor">#ifndef</phrase> <phrase role="identifier">BOOST_CONTRACT_NO_PUBLIC_FUNCTIONS</phrase>
+</programlisting></para><para>3. <computeroutput>BOOST_CONTRACT_PUBLIC_FUNCTION(v, r, obj)</computeroutput> expands to code equivalent to the following (for virtual public functions that do not override, not returning void):</para><para><programlisting><phrase role="preprocessor">#ifndef</phrase> <phrase role="identifier">BOOST_CONTRACT_NO_PUBLIC_FUNCTIONS</phrase>
     <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">check</phrase> <phrase role="identifier">internal_var</phrase> <phrase role="special">=</phrase>
             <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">public_function</phrase><phrase role="special">(</phrase><phrase role="identifier">v</phrase><phrase role="special">,</phrase> <phrase role="identifier">r</phrase><phrase role="special">,</phrase> <phrase role="identifier">obj</phrase><phrase role="special">)</phrase>
 <phrase role="preprocessor">#endif</phrase>
@@ -16454,9 +16706,9 @@ Disable Contract Compilation</link>). </para><synopsis xmlns:xi="http://www.w3.o
         Virtual Public Functions</link> </para>
 </para>
 </para></refsect1></refentry>
-<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45123869363568"><refmeta><refentrytitle>Macro BOOST_CONTRACT_PUBLIC_FUNCTION_OVERRIDE</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_PUBLIC_FUNCTION_OVERRIDE</refname><refpurpose>Program contracts that can be completely disabled at compile-time for public function overrides. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract_macro_hpp">boost/contract_macro.hpp</link>&gt;
+<refentry xmlns:xi="http://www.w3.org/2001/XInclude" id="BOOST_CO_idm45394998486064"><refmeta><refentrytitle>Macro BOOST_CONTRACT_PUBLIC_FUNCTION_OVERRIDE</refentrytitle><manvolnum>3</manvolnum></refmeta><refnamediv><refname>BOOST_CONTRACT_PUBLIC_FUNCTION_OVERRIDE</refname><refpurpose>Program contracts that can be completely disabled at compile-time for public function overrides. </refpurpose></refnamediv><refsynopsisdiv><synopsis><phrase role="comment">// In header: &lt;<link linkend="header.boost.contract_macro_hpp">boost/contract_macro.hpp</link>&gt;
 
-</phrase>BOOST_CONTRACT_PUBLIC_FUNCTION_OVERRIDE(...)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is used together with <computeroutput><link linkend="BOOST_CO_idm45123869622736">BOOST_CONTRACT_PRECONDITION</link></computeroutput>,  <computeroutput><link linkend="BOOST_CO_idm45123869611056">BOOST_CONTRACT_POSTCONDITION</link></computeroutput>, <computeroutput><link linkend="BOOST_CONTRACT_EXCEPT">BOOST_CONTRACT_EXCEPT</link></computeroutput>, and <computeroutput><link linkend="BOOST_CONTRACT_OLD">BOOST_CONTRACT_OLD</link></computeroutput> to specify preconditions, postconditions, exception guarantees, and old value copies at body that can be completely disabled at compile-time for public function overrides (virtual or not):</para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase>
+</phrase>BOOST_CONTRACT_PUBLIC_FUNCTION_OVERRIDE(...)</synopsis></refsynopsisdiv><refsect1><title>Description</title><para>This is used together with <computeroutput><link linkend="BOOST_CO_idm45394998748208">BOOST_CONTRACT_PRECONDITION</link></computeroutput>,  <computeroutput><link linkend="BOOST_CO_idm45394998736528">BOOST_CONTRACT_POSTCONDITION</link></computeroutput>, <computeroutput><link linkend="BOOST_CONTRACT_EXCEPT">BOOST_CONTRACT_EXCEPT</link></computeroutput>, and <computeroutput><link linkend="BOOST_CONTRACT_OLD">BOOST_CONTRACT_OLD</link></computeroutput> to specify preconditions, postconditions, exception guarantees, and old value copies at body that can be completely disabled at compile-time for public function overrides (virtual or not):</para><para><programlisting><phrase role="keyword">class</phrase> <phrase role="identifier">u</phrase>
     <phrase role="preprocessor">#define</phrase> <phrase role="identifier">BASES</phrase> <phrase role="keyword">private</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">constructor_precondition</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">u</phrase><phrase role="special">&gt;</phrase><phrase role="special">,</phrase> \
             <phrase role="keyword">public</phrase> <phrase role="identifier">b</phrase><phrase role="special">,</phrase> <phrase role="keyword">private</phrase> <phrase role="identifier">w</phrase>
     <phrase role="special">:</phrase> <phrase role="identifier">BASES</phrase>
@@ -16495,7 +16747,7 @@ Disable Contract Compilation</link>). </para><synopsis xmlns:xi="http://www.w3.o
                 <phrase role="identifier">BOOST_CONTRACT_ASSERT</phrase><phrase role="special">(</phrase><phrase role="special">...</phrase><phrase role="special">)</phrase><phrase role="special">;</phrase>
                 <phrase role="special">...</phrase>
             <phrase role="special">}</phrase><phrase role="special">)</phrase>
-        <phrase role="special">;</phrase>
+        <phrase role="special">;</phrase> <phrase role="comment">// Trailing `;` is required.</phrase>
 
         <phrase role="special">...</phrase> <phrase role="comment">// Function body.</phrase>
     <phrase role="special">}</phrase>
@@ -16516,14 +16768,14 @@ Disable Contract Compilation</link>). </para><synopsis xmlns:xi="http://www.w3.o
                 <phrase role="special">...</phrase>
             <phrase role="special">}</phrase><phrase role="special">)</phrase>
             <phrase role="special">...</phrase>
-        <phrase role="special">;</phrase>
+        <phrase role="special">;</phrase> <phrase role="comment">// Trailing `;` is required.</phrase>
 
         <phrase role="special">...</phrase> <phrase role="comment">// Function body (use `return result = return_expr`).</phrase>
     <phrase role="special">}</phrase>
     
     <phrase role="special">...</phrase>
 <phrase role="special">}</phrase><phrase role="special">;</phrase>
-</programlisting></para><para>Public function overrides should always use  <computeroutput><link linkend="BOOST_CO_idm45123869363568">BOOST_CONTRACT_PUBLIC_FUNCTION_OVERRIDE</link></computeroutput> otherwise this library will not be able to correctly use it for subcontracting.</para><para>This is an overloaded variadic macro and it can be used in the following different ways (note that no code is generated when  <computeroutput><link linkend="BOOST_CO_idm45123870441776">BOOST_CONTRACT_NO_PUBLIC_FUNCTIONS</link></computeroutput> is defined).</para><para>1. <computeroutput>BOOST_CONTRACT_PUBLIC_FUNCTION_OVERRIDE(override_type)(v, f, obj, ...)</computeroutput> expands to code equivalent to the following (for public function overrides that return void):</para><para><programlisting><phrase role="preprocessor">#ifndef</phrase> <phrase role="identifier">BOOST_CONTRACT_NO_PUBLIC_FUNCTIONS</phrase>
+</programlisting></para><para>Public function overrides should always use  <computeroutput><link linkend="BOOST_CO_idm45394998486064">BOOST_CONTRACT_PUBLIC_FUNCTION_OVERRIDE</link></computeroutput> otherwise this library will not be able to correctly use it for subcontracting.</para><para>This is an overloaded variadic macro and it can be used in the following different ways (note that no code is generated when  <computeroutput><link linkend="BOOST_CO_idm45394999586272">BOOST_CONTRACT_NO_PUBLIC_FUNCTIONS</link></computeroutput> is defined).</para><para>1. <computeroutput>BOOST_CONTRACT_PUBLIC_FUNCTION_OVERRIDE(override_type)(v, f, obj, ...)</computeroutput> expands to code equivalent to the following (for public function overrides that return void):</para><para><programlisting><phrase role="preprocessor">#ifndef</phrase> <phrase role="identifier">BOOST_CONTRACT_NO_PUBLIC_FUNCTIONS</phrase>
     <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase><phrase role="identifier">check</phrase> <phrase role="identifier">internal_var</phrase> <phrase role="special">=</phrase> <phrase role="identifier">boost</phrase><phrase role="special">::</phrase><phrase role="identifier">contract</phrase><phrase role="special">::</phrase>
             <phrase role="identifier">public_function</phrase><phrase role="special">&lt;</phrase><phrase role="identifier">override_type</phrase><phrase role="special">&gt;</phrase><phrase role="special">(</phrase><phrase role="identifier">v</phrase><phrase role="special">,</phrase> <phrase role="identifier">f</phrase><phrase role="special">,</phrase> <phrase role="identifier">obj</phrase><phrase role="special">,</phrase> <phrase role="special">...</phrase><phrase role="special">)</phrase>
 <phrase role="preprocessor">#endif</phrase>
@@ -16543,7 +16795,7 @@ Disable Contract Compilation</link>). </para><synopsis xmlns:xi="http://www.w3.o
 <listitem><para><computeroutput><emphasis role="bold">obj</emphasis></computeroutput> is the object <computeroutput>this</computeroutput> from the scope of the enclosing public function declaring the contract. This object might be mutable, <computeroutput>const</computeroutput>, <computeroutput>volatile</computeroutput>, or <computeroutput>const volatile</computeroutput> depending on the cv-qualifier of the enclosing function (volatile public functions will check volatile class invariants, see <link linkend="boost_contract.extras.volatile_public_functions">
         Volatile Public Functions</link>). </para>
 </listitem>
-<listitem><para><computeroutput><emphasis role="bold">...</emphasis></computeroutput> is a variadic macro parameter listing all the arguments passed to the enclosing public function override declaring the contract (by reference and in order they appear in the enclosing function declaration), but excluding the trailing argument <computeroutput>v</computeroutput>. </para>
+<listitem><para><computeroutput><emphasis role="bold">...</emphasis></computeroutput> is a variadic macro parameter listing all the arguments passed to the enclosing public function override declaring the contract (by reference and in the order they appear in the enclosing function declaration), but excluding the trailing argument <computeroutput>v</computeroutput>. </para>
 </listitem>
 <listitem><para><computeroutput><emphasis role="bold">internal_var</emphasis></computeroutput> is a variable name internally generated by this library (this name is unique but only on different line numbers so this macro cannot be expanded multiple times on the same line).</para>
 </listitem>
@@ -16561,6 +16813,47 @@ Disable Contract Compilation</link>). </para><synopsis xmlns:xi="http://www.w3.o
       This section contains notes on all releases of this library (from the latest
       to the oldest).
     </para>
+    <section id="boost_contract.release_notes.release_1_0_1">
+      <title><link linkend="boost_contract.release_notes.release_1_0_1">Release 1.0.1</link></title>
+      <para>
+        September 12, 2019
+      </para>
+      <para>
+        Cleanups and small fixes:
+      </para>
+      <orderedlist inheritnum="ignore" continuation="restarts">
+        <listitem>
+          <simpara>
+            Using <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">uncaught_exceptions</phrase></computeroutput> on C++17 compilers
+            onward (instead of the now obsolete <computeroutput xmlns:xi="http://www.w3.org/2001/XInclude"><phrase role="identifier">std</phrase><phrase role="special">::</phrase><phrase role="identifier">uncaught_exception</phrase></computeroutput>).
+          </simpara>
+        </listitem>
+        <listitem>
+          <simpara>
+            Fixed a few warnings.
+          </simpara>
+        </listitem>
+        <listitem>
+          <simpara>
+            Removed linking to Boost.System (Boost.System is now a header-only library).
+          </simpara>
+        </listitem>
+        <listitem>
+          <simpara>
+            Added this library to Boost's Continuous Integration (CI).
+          </simpara>
+        </listitem>
+        <listitem>
+          <simpara>
+            Fixed documentation typos.
+          </simpara>
+        </listitem>
+      </orderedlist>
+      <para>
+        Released files are part of <ulink url="https://www.boost.org/users/history/">Boost
+        1.72.0</ulink>.
+      </para>
+    </section>
     <section id="boost_contract.release_notes.release_1_0_0">
       <title><link linkend="boost_contract.release_notes.release_1_0_0">Release 1.0.0</link></title>
       <para>
@@ -16588,7 +16881,8 @@ Disable Contract Compilation</link>). </para><synopsis xmlns:xi="http://www.w3.o
         </listitem>
       </orderedlist>
       <para>
-        Released files are part of Boost.
+        Released files are part of <ulink url="https://www.boost.org/users/history/">Boost
+        1.67.0</ulink>.
       </para>
     </section>
     <section id="boost_contract.release_notes.release_0_5_0">
@@ -17322,6 +17616,10 @@ Disable Contract Compilation</link>). </para><synopsis xmlns:xi="http://www.w3.o
       the Boost Git repository.
     </para>
     <para>
+      Thanks to James E. King III for integrating this library with Boost's Continuous
+      Integration (CI).
+    </para>
+    <para>
       Thanks to David Maley for sharing source code form his inspiring work on emulating
       contract programming and subcontracting in C++ in <link linkend="Maley99_anchor">[Maley99]</link>.
     </para>