$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r84342 - in branches/release/libs: container container/bench container/doc container/doc/html container/doc/html/images container/proj/vc7ide container/test interprocess interprocess/doc interprocess/doc/html interprocess/proj/vc7ide intrusive intrusive/doc intrusive/doc/html intrusive/example intrusive/test move move/doc move/doc/html move/test
From: igaztanaga_at_[hidden]
Date: 2013-05-18 06:52:51
Author: igaztanaga
Date: 2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
New Revision: 84342
URL: http://svn.boost.org/trac/boost/changeset/84342
Log:
Merge changes for 1.54
Added:
   branches/release/libs/container/bench/
      - copied from r84341, /trunk/libs/container/bench/
   branches/release/libs/container/proj/vc7ide/bench_static_vector.vcproj
      - copied unchanged from r84341, /trunk/libs/container/proj/vc7ide/bench_static_vector.vcproj
   branches/release/libs/container/proj/vc7ide/static_vector_test.vcproj
      - copied unchanged from r83049, /trunk/libs/container/proj/vc7ide/static_vector_test.vcproj
   branches/release/libs/container/proj/vc7ide/throw_exception_test.vcproj
      - copied unchanged from r82583, /trunk/libs/container/proj/vc7ide/throw_exception_test.vcproj
   branches/release/libs/container/test/insert_test.hpp
      - copied unchanged from r84341, /trunk/libs/container/test/insert_test.hpp
   branches/release/libs/container/test/static_vector_test.cpp
      - copied, changed from r83049, /trunk/libs/container/test/static_vector_test.cpp
   branches/release/libs/container/test/static_vector_test.hpp
      - copied, changed from r83049, /trunk/libs/container/test/static_vector_test.hpp
   branches/release/libs/container/test/throw_exception_test.cpp
      - copied unchanged from r82583, /trunk/libs/container/test/throw_exception_test.cpp
Removed:
   branches/release/libs/container/doc/html/boostbook.css
   branches/release/libs/container/doc/html/images/blank.png
   branches/release/libs/container/doc/html/images/caution.png
   branches/release/libs/container/doc/html/images/draft.png
   branches/release/libs/container/doc/html/images/home.png
   branches/release/libs/container/doc/html/images/important.png
   branches/release/libs/container/doc/html/images/next.png
   branches/release/libs/container/doc/html/images/note.png
   branches/release/libs/container/doc/html/images/prev.png
   branches/release/libs/container/doc/html/images/tip.png
   branches/release/libs/container/doc/html/images/toc-blank.png
   branches/release/libs/container/doc/html/images/toc-minus.png
   branches/release/libs/container/doc/html/images/toc-plus.png
   branches/release/libs/container/doc/html/images/up.png
   branches/release/libs/container/doc/html/images/warning.png
   branches/release/libs/container/doc/html/reference.css
   branches/release/libs/interprocess/doc/html/
   branches/release/libs/intrusive/doc/html/
   branches/release/libs/move/doc/html/
Properties modified: 
   branches/release/libs/container/   (props changed)
   branches/release/libs/interprocess/   (props changed)
   branches/release/libs/intrusive/   (props changed)
   branches/release/libs/move/   (props changed)
Text files modified: 
   branches/release/libs/container/doc/Jamfile.v2                        |     2                                         
   branches/release/libs/container/doc/container.qbk                     |    58 +                                       
   branches/release/libs/container/proj/vc7ide/container.sln             |    24                                         
   branches/release/libs/container/proj/vc7ide/container.vcproj          |   206 ++++--                                  
   branches/release/libs/container/proj/vc7ide/vector_test.vcproj        |     1                                         
   branches/release/libs/container/test/deque_test.cpp                   |    22                                         
   branches/release/libs/container/test/dummy_test_allocator.hpp         |    21                                         
   branches/release/libs/container/test/expand_bwd_test_allocator.hpp    |    12                                         
   branches/release/libs/container/test/expand_bwd_test_template.hpp     |    14                                         
   branches/release/libs/container/test/flat_tree_test.cpp               |     3                                         
   branches/release/libs/container/test/heap_allocator_v1.hpp            |     3                                         
   branches/release/libs/container/test/list_test.cpp                    |     9                                         
   branches/release/libs/container/test/list_test.hpp                    |     7                                         
   branches/release/libs/container/test/map_test.hpp                     |    24                                         
   branches/release/libs/container/test/movable_int.hpp                  |    97 +-                                      
   branches/release/libs/container/test/set_test.hpp                     |    21                                         
   branches/release/libs/container/test/slist_test.cpp                   |    10                                         
   branches/release/libs/container/test/stable_vector_test.cpp           |     7                                         
   branches/release/libs/container/test/static_vector_test.cpp           |  1218 ++++++++++++++++++--------------------- 
   branches/release/libs/container/test/static_vector_test.hpp           |     2                                         
   branches/release/libs/container/test/vector_test.cpp                  |    11                                         
   branches/release/libs/container/test/vector_test.hpp                  |    53 +                                       
   branches/release/libs/interprocess/doc/Jamfile.v2                     |    16                                         
   branches/release/libs/interprocess/doc/interprocess.qbk               |    21                                         
   branches/release/libs/interprocess/proj/vc7ide/interprocesslib.vcproj |     3                                         
   branches/release/libs/intrusive/doc/intrusive.qbk                     |     9                                         
   branches/release/libs/intrusive/example/Jamfile.v2                    |     2                                         
   branches/release/libs/intrusive/example/doc_any_hook.cpp              |     4                                         
   branches/release/libs/intrusive/example/doc_avl_set.cpp               |     4                                         
   branches/release/libs/intrusive/example/doc_erasing_and_disposing.cpp |    28                                         
   branches/release/libs/intrusive/example/doc_how_to_use.cpp            |     4                                         
   branches/release/libs/intrusive/example/doc_list.cpp                  |     4                                         
   branches/release/libs/intrusive/example/doc_offset_ptr.cpp            |    15                                         
   branches/release/libs/intrusive/example/doc_set.cpp                   |     4                                         
   branches/release/libs/intrusive/example/doc_sg_set.cpp                |     4                                         
   branches/release/libs/intrusive/example/doc_slist.cpp                 |     4                                         
   branches/release/libs/intrusive/example/doc_splay_set.cpp             |     6                                         
   branches/release/libs/intrusive/example/doc_treap_set.cpp             |     4                                         
   branches/release/libs/intrusive/example/doc_unordered_set.cpp         |     3                                         
   branches/release/libs/intrusive/test/Jamfile.v2                       |     8                                         
   branches/release/libs/intrusive/test/any_test.cpp                     |     4                                         
   branches/release/libs/intrusive/test/test_container.hpp               |     4                                         
   branches/release/libs/move/doc/Jamfile.v2                             |     4                                         
   branches/release/libs/move/doc/move.qbk                               |     7                                         
   branches/release/libs/move/test/move.cpp                              |     1                                         
   45 files changed, 1110 insertions(+), 878 deletions(-)
Modified: branches/release/libs/container/doc/Jamfile.v2
==============================================================================
--- branches/release/libs/container/doc/Jamfile.v2	(original)
+++ branches/release/libs/container/doc/Jamfile.v2	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -50,6 +50,8 @@
    :
         <format>html:<xsl:param>boost.root=../../../..
         <format>html:<xsl:param>boost.libraries=../../../../libs/libraries.htm
+        <format>html:<xsl:param>img.src.path=../../../../doc/html/
+        <format>xhtml:<xsl:param>img.src.path=../../../../doc/html/
         <xsl:param>generate.section.toc.level=3
         <xsl:param>chunk.first.sections=1
         <format>pdf:<xsl:param>img.src.path=$(images_location)/
Modified: branches/release/libs/container/doc/container.qbk
==============================================================================
--- branches/release/libs/container/doc/container.qbk	(original)
+++ branches/release/libs/container/doc/container.qbk	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -189,6 +189,49 @@
 
 [endsect]
 
+[section:exception_handling Boost.Container and C++ exceptions]
+
+In some environments, such as game development or embedded systems, C++ exceptions are disabled or a customized error handling is needed.
+According to document [@http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html N2271 EASTL -- Electronic Arts Standard Template Library]
+exceptions can be disabled for several reasons:
+
+*  ["['Exception handling incurs some kind of cost in all compiler implementations, including those that avoid
+   the cost during normal execution. However, in some cases this cost may arguably offset the cost of the code that it is replacing.]]
+*  ["['Exception handling is often agreed to be a superior solution for handling a large range of function return values. However,
+   avoiding the creation of functions that need large ranges of return values is superior to using exception handling to handle such values.]]
+*  ["['Using exception handling correctly can be difficult in the case of complex software.]]
+*  ["['The execution of throw and catch can be significantly expensive with some implementations.]]
+*  ["['Exception handling violates the don't-pay-for-what-you-don't-use design of C++, as it incurs overhead in any non-leaf function that
+   has destructible stack objects regardless of whether they use exception handling.]]
+*  ["['The approach that game software usually takes is to avoid the need for exception handling where possible; avoid the possibility
+   of circumstances that may lead to exceptions. For example, verify up front that there is enough memory for a subsystem to do its job
+   instead of trying to deal with the problem via exception handling or any other means after it occurs.]]
+*  ["['However, some game libraries may nevertheless benefit from the use of exception handling. It's best, however,
+   if such libraries keep the exception handling internal lest they force their usage of exception handling on the rest of the application.]]
+
+In order to support environments without C++ exception support or environments with special error handling needs,
+[*Boost.Container] changes error signalling behaviour when `BOOST_CONTAINER_USER_DEFINED_THROW_CALLBACKS` or `BOOST_NO_EXCEPTIONS`
+is defined. The former shall be defined by the user and the latter can be either defined by the user or implicitly defined by [*Boost.Confg]
+when the compiler has been invoked with the appropriate flag (like `-fno-exceptions` in GCC).
+
+When dealing with user-defined classes, (e.g. when constructing user-defined classes):
+
+*  If `BOOST_NO_EXCEPTIONS` is defined, the library avoids using `try`/`catch`/`throw` statements. The class writer must handle and
+   propagate error situations internally as no error will be propagated through [*Boost.Container].
+*  If `BOOST_NO_EXCEPTIONS` is *not* defined, the library propagates exceptions offering the exception guarantees detailed in the documentation.
+
+When the library needs to throw an exception (such as `out_of_range` when an incorrect index is used in `vector::at`)], the library calls
+a throw callback declared in `<boost/container/throw_exception.hpp>`:
+
+*  If `BOOST_CONTAINER_USER_DEFINED_THROW_CALLBACKS` is defined, then the programmer must provide its own definition for all
+   `throw_xxx` functions. Those functions can't return, they must throw an exception or call `std::exit` or `std::abort`.
+*  Else if `BOOST_NO_EXCEPTIONS` is defined, a `BOOST_ASSERT_MSG` assertion is triggered
+   (see [@http://www.boost.org/libs/utility/assert.html Boost.Assert] for more information). 
+   If this assertion returns, then `std::abort` is called.
+*  Else, an appropriate standard library exception is thrown (like `std::out_of_range`).
+
+[endsect]
+
 [section:non_standard_containers Non-standard containers]
 
 [section:stable_vector ['stable_vector]]
@@ -210,7 +253,7 @@
 insertion/deletion, minimal memory overhead, etc.)?
 The following image describes the layout of a possible data structure upon which to base the design of a stable vector:
 
-[$images/stable_vector.png [width 50%] [align center] ]
+[$../../libs/container/doc/html/images/stable_vector.png  [width 50%] [align center] ]
 
 Each element is stored in its own separate node. All the nodes are referenced from a contiguous array of pointers, but
 also every node contains an "up" pointer referring back to the associated array cell. This up pointer is the key element
@@ -569,6 +612,8 @@
    usually implies a no-throw guarantee (if predicate's or allocator's default constructor doesn't throw).
    * Small string optimization for [classref boost::container::basic_string basic_string].
 * New extensions beyond the standard based on user feedback to improve code performance.
+* You need a portable implementation that works when compiling without exceptions support or 
+  you need to customize the error handling when a container needs to signall an exceptional error.
 
 [endsect]
 
@@ -614,6 +659,17 @@
 
 [section:release_notes Release Notes]
 
+[section:release_notes_boost_1_54_00 Boost 1.54 Release]
+
+*  Speed improvements in `vector` constructors/copy/move/swap, dispatching to memcpy when possible.
+*  Support for `BOOST_NO_EXCEPTIONS` [@https://svn.boost.org/trac/boost/ticket/7227 #7227].
+*  Fixed bugs [@https://svn.boost.org/trac/boost/ticket/7921 #7921],
+              [@https://svn.boost.org/trac/boost/ticket/7969 #7969],
+              [@https://svn.boost.org/trac/boost/ticket/8118 #8118],
+              [@https://svn.boost.org/trac/boost/ticket/8294 #8294].
+
+[endsect]
+
 [section:release_notes_boost_1_53_00 Boost 1.53 Release]
 
 *  Fixed bug [@https://svn.boost.org/trac/boost/ticket/7650 #7650].
Deleted: branches/release/libs/container/doc/html/boostbook.css
==============================================================================
--- branches/release/libs/container/doc/html/boostbook.css	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
+++ (empty file)
@@ -1,537 +0,0 @@
-/*=============================================================================
-    Copyright (c) 2004 Joel de Guzman
-
-    Use, modification and distribution is subject to the Boost Software
-    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-    http://www.boost.org/LICENSE_1_0.txt)
-=============================================================================*/
-
-/*=============================================================================
-    Body defaults
-=============================================================================*/
-
-    body 
-    {
-        margin: 1em;
-        font-family: sans-serif;
-    }
-
-/*=============================================================================
-    Paragraphs
-=============================================================================*/
-
-    p 
-    {
-        text-align: left;
-        font-size: 10pt; 
-        line-height: 1.15;
-    }
-
-/*=============================================================================
-    Program listings
-=============================================================================*/
-
-    /* Code on paragraphs */
-    p tt.computeroutput
-    {
-        font-size: 10pt;
-    }
-
-    pre.synopsis
-    {
-        font-size: 10pt;
-        margin: 1pc 4% 0pc 4%;
-        padding: 0.5pc 0.5pc 0.5pc 0.5pc;
-    }
-
-    .programlisting, 
-    .screen
-    {
-        font-size: 10pt;
-        display: block;
-        margin: 1pc 4% 0pc 4%;
-        padding: 0.5pc 0.5pc 0.5pc 0.5pc;
-    }
-
-/*=============================================================================
-    Headings
-=============================================================================*/
-
-    h1, h2, h3, h4, h5, h6 
-    { 
-        text-align: left;
-        margin: 1em 0em 0.5em 0em;
-        font-weight: bold;
-    }
-
-    h1 { font: 140% }
-    h2 { font: bold 140% }
-    h3 { font: bold 130% }
-    h4 { font: bold 120% }
-    h5 { font: italic 110% }
-    h6 { font: italic 100% }
-
-    /* Top page titles */
-    title, 
-    h1.title, 
-    h2.title
-    h3.title, 
-    h4.title, 
-    h5.title, 
-    h6.title, 
-    .refentrytitle
-    {
-        font-weight: bold;
-        margin-bottom: 1pc;
-    }
-
-    h1.title { font-size: 140% }
-    h2.title { font-size: 140% }
-    h3.title { font-size: 130% }
-    h4.title { font-size: 120% }
-    h5.title { font-size: 110% }
-    h6.title { font-size: 100% }
-
-    .section h1 
-    {
-        margin: 0em 0em 0.5em 0em;
-        font-size: 140%;
-    }
-
-    .section h2 { font-size: 140% }
-    .section h3 { font-size: 130% }
-    .section h4 { font-size: 120% }
-    .section h5 { font-size: 110% }
-    .section h6 { font-size: 100% }
-
-    /* Code on titles */
-    h1 tt.computeroutput { font-size: 140% }
-    h2 tt.computeroutput { font-size: 140% }
-    h3 tt.computeroutput { font-size: 130% }
-    h4 tt.computeroutput { font-size: 120% }
-    h5 tt.computeroutput { font-size: 110% }
-    h6 tt.computeroutput { font-size: 100% }
-
-/*=============================================================================
-    Author
-=============================================================================*/
-
-    h3.author 
-    { 
-        font-size: 100% 
-    }
-
-/*=============================================================================
-    Lists
-=============================================================================*/
-
-    li
-    {
-        font-size: 10pt;
-        line-height: 1.3;
-    }
-
-    /* Unordered lists */
-    ul 
-    {
-        text-align: left;
-    }
-
-    /* Ordered lists */
-    ol 
-    {
-        text-align: left;
-    }
-
-/*=============================================================================
-    Links
-=============================================================================*/
-
-    a
-    {
-        text-decoration: none; /* no underline */
-    }
-
-    a:hover
-    {
-        text-decoration: underline;
-    }
-
-/*=============================================================================
-    Spirit style navigation
-=============================================================================*/
-
-    .spirit-nav
-    {
-        text-align: right;
-    }
-
-    .spirit-nav a
-    {
-        color: white;
-        padding-left: 0.5em;
-    }
-
-    .spirit-nav img
-    {
-        border-width: 0px;
-    }
-
-/*=============================================================================
-    Table of contents
-=============================================================================*/
-
-    .toc
-    {
-       margin: 1pc 4% 0pc 4%;
-       padding: 0.1pc 1pc 0.1pc 1pc;
-       font-size: 10pt;
-       line-height: 1.15;
-    }
-
-    .toc-main
-    {
-     width: 600;
-    text-align: center;
-       margin: 1pc 1pc 1pc 10%;
-       padding: 2pc 1pc 3pc 1pc;
-    line-height: 0.1;
-    }
-
-    .boost-toc
-    {
-       float: right;
-       padding: 0.5pc;
-    }
-
-/*=============================================================================
-    Tables
-=============================================================================*/
-
-    .table-title, 
-    div.table p.title
-    {
-        margin-left: 4%;
-        padding-right: 0.5em; 
-        padding-left: 0.5em;
-    }
-
-    .informaltable table, 
-    .table table
-    {
-        width: 92%;
-        margin-left: 4%;
-        margin-right: 4%;
-    }
-
-    div.informaltable table, 
-    div.table table
-    {
-        padding: 4px;
-    }
-
-    /* Table Cells */
-    div.informaltable table tr td, 
-    div.table table tr td
-    {
-        padding: 0.5em;
-        text-align: left;
-    }
-
-    div.informaltable table tr th, 
-    div.table table tr th
-    {
-        padding: 0.5em 0.5em 0.5em 0.5em;
-        border: 1pt solid white;
-        font-size: 120%;
-    }
-
-/*=============================================================================
-    Blurbs
-=============================================================================*/
-
-    div.note,
-    div.tip,
-    div.important,
-    div.caution,
-    div.warning,
-    p.blurb
-    {
-        font-size: 10pt;
-        line-height: 1.2;
-        display: block;
-        margin: 1pc 4% 0pc 4%;
-        padding: 0.5pc 0.5pc 0.5pc 0.5pc;
-    }
-
-    p.blurb img
-    {
-        padding: 1pt;
-    }
-
-/*=============================================================================
-    Variable Lists
-=============================================================================*/
-
-    span.term
-    {
-        font-weight: bold;
-        font-size: 10pt;
-    }
-
-    div.variablelist table tbody tr td
-    {
-        text-align: left;
-        vertical-align: top;
-        padding: 0em 2em 0em 0em;
-        font-size: 10pt;
-    }
-
-    div.variablelist table tbody tr td p
-    {
-        margin: 0em 0em 0.5em 0em;
-    }
-
-    /* Make the terms in definition lists bold */
-    div.variablelist dl dt
-    {
-        font-weight: bold;
-        font-size: 10pt;
-    }
-
-    div.variablelist dl dd
-    {
-        margin: 1em 0em 1em 2em;
-        font-size: 10pt;
-    }
-
-/*=============================================================================
-    Misc
-=============================================================================*/
-
-    /* Title of books and articles in bibliographies */
-    span.title
-    {
-        font-style: italic;
-    }
-
-    span.underline
-    {
-        text-decoration: underline;
-    }
-
-    span.strikethrough
-    {
-        text-decoration: line-through;
-    }
-
-    /* Copyright, Legal Notice */
-    div div.legalnotice p
-    {
-        font-size: 8pt;
-        text-align: left
-    }
-
-/*=============================================================================
-    Colors
-=============================================================================*/
-
-    @media screen
-    {
-        /* Links */
-        a
-        {
-            color: #0C7445;
-        }
-
-        a:visited
-        {
-            color: #663974;
-        }
-
-        h1 a, h2 a, h3 a, h4 a, h5 a, h6 a,
-        h1 a:hover, h2 a:hover, h3 a:hover, h4 a:hover, h5 a:hover, h6 a:hover,
-        h1 a:visited, h2 a:visited, h3 a:visited, h4 a:visited, h5 a:visited, h6 a:visited
-        {
-            text-decoration: none; /* no underline */
-            color: #000000;
-        }
-
-        /* Syntax Highlighting */
-        .keyword        { color: #0000AA; }
-        .identifier     { color: #000000; }
-        .special        { color: #707070; }
-        .preprocessor   { color: #402080; }
-        .char           { color: teal; }
-        .comment        { color: #800000; }
-        .string         { color: teal; }
-        .number         { color: teal; }
-        .white_bkd      { background-color: #E8FBE9; }
-        .dk_grey_bkd    { background-color: #A0DAAC; }
-
-        /* Copyright, Legal Notice */
-        .copyright
-        { 
-            color: #666666; 
-            font-size: small; 
-        }
-
-        div div.legalnotice p
-        {
-            color: #666666;
-        }
-
-        /* Program listing */
-        pre.synopsis
-        {
-            border: 1px solid #DCDCDC;
-            border-bottom: 3px solid #9D9D9D;
-            border-right: 3px solid #9D9D9D;
-            background-color: #FAFFFB;
-        }
-
-        .programlisting, 
-        .screen
-        {
-            border: 1px solid #DCDCDC;
-            border-bottom: 3px solid #9D9D9D;
-            border-right: 3px solid #9D9D9D;
-            background-color: #FAFFFB;
-        }
-
-        /* Blurbs */
-        div.note,
-        div.tip,
-        div.important,
-        div.caution,
-        div.warning,
-        p.blurb
-        {
-            border: 1px solid #DCDCDC;
-            border-bottom: 3px solid #9D9D9D;
-            border-right: 3px solid #9D9D9D;
-            background-color: #FAFFFB;
-        }
-
-        /* Table of contents */
-        .toc
-        {
-            border: 1px solid #DCDCDC;
-            border-bottom: 3px solid #9D9D9D;
-            border-right: 3px solid #9D9D9D;
-            background-color: #FAFFFB;
-        }
-
-        /* Table of contents */
-        .toc-main
-        {
-            border: 1px solid #DCDCDC;
-            border-bottom: 3px solid #9D9D9D;
-            border-right: 3px solid #9D9D9D;
-            background-color: #FAFFFB;
-        }
-
-
-        /* Tables */
-        div.informaltable table tr td, 
-        div.table table tr td
-        {
-            border: 1px solid #DCDCDC;
-            background-color: #FAFFFB;
-        }
-
-        div.informaltable table tr th, 
-        div.table table tr th
-        {
-            background-color: #E3F9E4;
-            border: 1px solid #DCDCDC;
-        }
-
-        /* Misc */
-        span.highlight
-        {
-            color: #00A000;
-        }
-    }
-
-    @media print
-    {
-        /* Links */
-        a
-        {
-            color: black;
-        }
-
-        a:visited
-        {
-            color: black;
-        }
-
-        .spirit-nav
-        {
-            display: none;
-        }
-
-        /* Program listing */
-        pre.synopsis
-        {
-            border: 1px solid gray;
-            background-color: #FAFFFB;
-        }
-
-        .programlisting, 
-        .screen
-        {
-            border: 1px solid gray;
-            background-color: #FAFFFB;
-        }
-
-        /* Table of contents */
-        .toc
-        {
-            border: 1px solid #DCDCDC;
-            border-bottom: 3px solid #9D9D9D;
-            border-right: 3px solid #9D9D9D;
-            background-color: #FAFFFB;
-        }
-
-        /* Table of contents */
-        .toc-main
-        {
-            border: 1px solid #DCDCDC;
-            border-bottom: 3px solid #9D9D9D;
-            border-right: 3px solid #9D9D9D;
-            background-color: #FAFFFB;
-        }
-
-        .informaltable table, 
-        .table table
-        {
-            border: 1px solid #DCDCDC;
-            border-bottom: 3px solid #9D9D9D;
-            border-right: 3px solid #9D9D9D;
-            border-collapse: collapse;
-            background-color: #FAFFFB;
-        }
-
-        /* Tables */
-        div.informaltable table tr td, 
-        div.table table tr td
-        {
-            border: 1px solid #DCDCDC;
-            background-color: #FAFFFB;
-        }
-
-        div.informaltable table tr th, 
-        div.table table tr th
-        {
-            border: 1px solid #DCDCDC;
-            background-color: #FAFFFB;
-        }
-
-        /* Misc */
-        span.highlight
-        {
-            font-weight: bold;
-        }
-    }
Deleted: branches/release/libs/container/doc/html/images/blank.png
==============================================================================
Binary file. No diff available.
Deleted: branches/release/libs/container/doc/html/images/caution.png
==============================================================================
Binary file. No diff available.
Deleted: branches/release/libs/container/doc/html/images/draft.png
==============================================================================
Binary file. No diff available.
Deleted: branches/release/libs/container/doc/html/images/home.png
==============================================================================
Binary file. No diff available.
Deleted: branches/release/libs/container/doc/html/images/important.png
==============================================================================
Binary file. No diff available.
Deleted: branches/release/libs/container/doc/html/images/next.png
==============================================================================
Binary file. No diff available.
Deleted: branches/release/libs/container/doc/html/images/note.png
==============================================================================
Binary file. No diff available.
Deleted: branches/release/libs/container/doc/html/images/prev.png
==============================================================================
Binary file. No diff available.
Deleted: branches/release/libs/container/doc/html/images/tip.png
==============================================================================
Binary file. No diff available.
Deleted: branches/release/libs/container/doc/html/images/toc-blank.png
==============================================================================
Binary file. No diff available.
Deleted: branches/release/libs/container/doc/html/images/toc-minus.png
==============================================================================
Binary file. No diff available.
Deleted: branches/release/libs/container/doc/html/images/toc-plus.png
==============================================================================
Binary file. No diff available.
Deleted: branches/release/libs/container/doc/html/images/up.png
==============================================================================
Binary file. No diff available.
Deleted: branches/release/libs/container/doc/html/images/warning.png
==============================================================================
Binary file. No diff available.
Deleted: branches/release/libs/container/doc/html/reference.css
==============================================================================
--- branches/release/libs/container/doc/html/reference.css	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
+++ (empty file)
@@ -1,12 +0,0 @@
-/*=============================================================================
-    Copyright (c) 2004 Joel de Guzman
-
-    Use, modification and distribution is subject to the Boost Software
-    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
-    http://www.boost.org/LICENSE_1_0.txt)
-=============================================================================*/
-PRE.synopsis { 
-  background-color: #e0ffff;
-  border: thin solid blue;
-  padding: 1em
-}
Modified: branches/release/libs/container/proj/vc7ide/container.sln
==============================================================================
--- branches/release/libs/container/proj/vc7ide/container.sln	(original)
+++ branches/release/libs/container/proj/vc7ide/container.sln	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -55,6 +55,18 @@
         ProjectSection(ProjectDependencies) = postProject
         EndProjectSection
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "throw_exception_test", "throw_exception_test.vcproj", "{5A8D91E0-FA57-284F-84FE-D3A6BA792002}"
+	ProjectSection(ProjectDependencies) = postProject
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "static_vector_test", "static_vector_test.vcproj", "{58E1C1C3-096A-84FE-4FA2-D6BA79201C02}"
+	ProjectSection(ProjectDependencies) = postProject
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bench_static_vector", "bench_static_vector.vcproj", "{58E1C1C3-096A-84FE-4FA2-D6BA79201C02}"
+	ProjectSection(ProjectDependencies) = postProject
+	EndProjectSection
+EndProject
 Global
         GlobalSection(SolutionConfiguration) = preSolution
                 Debug = Debug
@@ -119,6 +131,18 @@
                 {58CCE183-6092-48FE-A4F7-BA0D3A792606}.Debug.Build.0 = Debug|Win32
                 {58CCE183-6092-48FE-A4F7-BA0D3A792606}.Release.ActiveCfg = Release|Win32
                 {58CCE183-6092-48FE-A4F7-BA0D3A792606}.Release.Build.0 = Release|Win32
+		{5A8D91E0-FA57-284F-84FE-D3A6BA792002}.Debug.ActiveCfg = Debug|Win32
+		{5A8D91E0-FA57-284F-84FE-D3A6BA792002}.Debug.Build.0 = Debug|Win32
+		{5A8D91E0-FA57-284F-84FE-D3A6BA792002}.Release.ActiveCfg = Release|Win32
+		{5A8D91E0-FA57-284F-84FE-D3A6BA792002}.Release.Build.0 = Release|Win32
+		{58E1C1C3-096A-84FE-4FA2-D6BA79201C02}.Debug.ActiveCfg = Debug|Win32
+		{58E1C1C3-096A-84FE-4FA2-D6BA79201C02}.Debug.Build.0 = Debug|Win32
+		{58E1C1C3-096A-84F0-4FA2-D6BA79201C02}.Release.ActiveCfg = Release|Win32
+		{58E1C1C3-096A-84F0-4FA2-D6BA79201C02}.Release.Build.0 = Release|Win32
+		{58E1C1C3-096A-84F1-4FA2-D6BA79201C02}.Debug.ActiveCfg = Debug|Win32
+		{58E1C1C3-096A-84F1-4FA2-D6BA79201C02}.Debug.Build.0 = Debug|Win32
+		{58E1C1C3-096A-84F2-4FA2-D6BA79201C02}.Release.ActiveCfg = Release|Win32
+		{58E1C1C3-096A-84F2-4FA2-D6BA79201C02}.Release.Build.0 = Release|Win32
         EndGlobalSection
         GlobalSection(ExtensibilityGlobals) = postSolution
         EndGlobalSection
Modified: branches/release/libs/container/proj/vc7ide/container.vcproj
==============================================================================
--- branches/release/libs/container/proj/vc7ide/container.vcproj	(original)
+++ branches/release/libs/container/proj/vc7ide/container.vcproj	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -96,96 +96,15 @@
         </References>
         <Files>
                 <Filter
-			Name="doc"
-			Filter="">
-			<File
-				RelativePath="..\..\doc\container.qbk">
-			</File>
-			<File
-				RelativePath="..\..\doc\index.idx">
-			</File>
-			<File
-				RelativePath="..\..\doc\Jamfile.v2">
-			</File>
-		</Filter>
-		<Filter
-			Name="example"
-			Filter="">
-			<File
-				RelativePath="..\..\example\doc_emplace.cpp">
-			</File>
-			<File
-				RelativePath="..\..\example\doc_move_containers.cpp">
-			</File>
-			<File
-				RelativePath="..\..\example\doc_recursive_containers.cpp">
-			</File>
-			<File
-				RelativePath="..\..\example\doc_type_erasure.cpp">
-			</File>
-			<File
-				RelativePath="..\..\example\Jamfile.v2">
-			</File>
-		</Filter>
-		<Filter
-			Name="test"
-			Filter="">
-			<File
-				RelativePath="..\..\test\check_equal_containers.hpp">
-			</File>
-			<File
-				RelativePath="..\..\test\dummy_test_allocator.hpp">
-			</File>
-			<File
-				RelativePath="..\..\test\emplace_test.hpp">
-			</File>
-			<File
-				RelativePath="..\..\test\expand_bwd_test_allocator.hpp">
-			</File>
-			<File
-				RelativePath="..\..\test\expand_bwd_test_template.hpp">
-			</File>
-			<File
-				RelativePath="..\..\test\forward_to_input_iterator.hpp">
-			</File>
-			<File
-				RelativePath="..\..\test\heap_allocator_v1.hpp">
-			</File>
-			<File
-				RelativePath="..\..\test\Jamfile.v2">
-			</File>
-			<File
-				RelativePath="..\..\test\list_test.hpp">
-			</File>
-			<File
-				RelativePath="..\..\test\map_test.hpp">
-			</File>
-			<File
-				RelativePath="..\..\test\movable_int.hpp">
-			</File>
-			<File
-				RelativePath="..\..\test\print_container.hpp">
-			</File>
-			<File
-				RelativePath="..\..\test\propagate_allocator_test.hpp">
-			</File>
-			<File
-				RelativePath="..\..\test\set_test.hpp">
-			</File>
-			<File
-				RelativePath="..\..\test\util.hpp">
-			</File>
-			<File
-				RelativePath="..\..\test\vector_test.hpp">
-			</File>
-		</Filter>
-		<Filter
                         Name="container"
                         Filter="">
                         <File
                                 RelativePath="..\..\..\..\boost\container\allocator_traits.hpp">
                         </File>
                         <File
+				RelativePath="..\..\..\..\boost\container\container_exceptions.hpp">
+			</File>
+			<File
                                 RelativePath="..\..\..\..\boost\container\container_fwd.hpp">
                         </File>
                         <File
@@ -219,9 +138,15 @@
                                 RelativePath="..\..\..\..\boost\container\stable_vector.hpp">
                         </File>
                         <File
+				RelativePath="..\..\..\..\boost\container\static_vector.hpp">
+			</File>
+			<File
                                 RelativePath="..\..\..\..\boost\container\string.hpp">
                         </File>
                         <File
+				RelativePath="..\..\..\..\boost\container\throw_exception.hpp">
+			</File>
+			<File
                                 RelativePath="..\to-do.txt">
                         </File>
                         <File
@@ -261,6 +186,9 @@
                                         RelativePath="..\..\..\..\boost\container\detail\function_detector.hpp">
                                 </File>
                                 <File
+					RelativePath="..\..\..\..\boost\container\detail\hash_table.hpp">
+				</File>
+				<File
                                         RelativePath="..\..\..\..\boost\container\detail\iterators.hpp">
                                 </File>
                                 <File
@@ -316,6 +244,116 @@
                                 </File>
                         </Filter>
                 </Filter>
+		<Filter
+			Name="doc"
+			Filter="">
+			<File
+				RelativePath="..\..\doc\container.qbk">
+			</File>
+			<File
+				RelativePath="..\..\doc\index.idx">
+			</File>
+			<File
+				RelativePath="..\..\doc\Jamfile.v2">
+			</File>
+		</Filter>
+		<Filter
+			Name="example"
+			Filter="">
+			<File
+				RelativePath="..\..\example\doc_emplace.cpp">
+			</File>
+			<File
+				RelativePath="..\..\example\doc_move_containers.cpp">
+			</File>
+			<File
+				RelativePath="..\..\example\doc_recursive_containers.cpp">
+			</File>
+			<File
+				RelativePath="..\..\example\doc_type_erasure.cpp">
+			</File>
+			<File
+				RelativePath="..\..\example\Jamfile.v2">
+			</File>
+		</Filter>
+		<Filter
+			Name="test"
+			Filter="">
+			<File
+				RelativePath="..\..\test\check_equal_containers.hpp">
+			</File>
+			<File
+				RelativePath="..\..\test\dummy_test_allocator.hpp">
+			</File>
+			<File
+				RelativePath="..\..\test\emplace_test.hpp">
+			</File>
+			<File
+				RelativePath="..\..\test\expand_bwd_test_allocator.hpp">
+			</File>
+			<File
+				RelativePath="..\..\test\expand_bwd_test_template.hpp">
+			</File>
+			<File
+				RelativePath="..\..\test\forward_to_input_iterator.hpp">
+			</File>
+			<File
+				RelativePath="..\..\test\heap_allocator_v1.hpp">
+			</File>
+			<File
+				RelativePath="..\..\test\insert_test.hpp">
+			</File>
+			<File
+				RelativePath="..\..\test\Jamfile.v2">
+			</File>
+			<File
+				RelativePath="..\..\test\list_test.hpp">
+			</File>
+			<File
+				RelativePath="..\..\test\map_test.hpp">
+			</File>
+			<File
+				RelativePath="..\..\test\movable_int.hpp">
+			</File>
+			<File
+				RelativePath="..\..\test\print_container.hpp">
+			</File>
+			<File
+				RelativePath="..\..\test\propagate_allocator_test.hpp">
+			</File>
+			<File
+				RelativePath="..\..\test\set_test.hpp">
+			</File>
+			<File
+				RelativePath="..\..\test\static_vector_test.hpp">
+			</File>
+			<File
+				RelativePath="..\..\test\util.hpp">
+			</File>
+			<File
+				RelativePath="..\..\test\vector_test.hpp">
+			</File>
+		</Filter>
+		<Filter
+			Name="bench"
+			Filter="">
+			<File
+				RelativePath="..\..\bench\varray.hpp">
+			</File>
+			<Filter
+				Name="detail"
+				Filter="">
+				<File
+					RelativePath="..\..\bench\detail\varray.hpp">
+				</File>
+				<File
+					RelativePath="..\..\bench\detail\varray_concept.hpp">
+				</File>
+				<File
+					RelativePath="..\..\bench\detail\varray_util.hpp">
+				</File>
+			</Filter>
+		</Filter>
         </Files>
         <Globals>
         </Globals>
Modified: branches/release/libs/container/proj/vc7ide/vector_test.vcproj
==============================================================================
--- branches/release/libs/container/proj/vc7ide/vector_test.vcproj	(original)
+++ branches/release/libs/container/proj/vc7ide/vector_test.vcproj	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -22,6 +22,7 @@
                                 AdditionalIncludeDirectories="../../../.."
                                 PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;BOOST_DATE_TIME_NO_LIB"
                                 MinimalRebuild="TRUE"
+				ExceptionHandling="TRUE"
                                 BasicRuntimeChecks="3"
                                 RuntimeLibrary="3"
                                 TreatWChar_tAsBuiltInType="TRUE"
Modified: branches/release/libs/container/test/deque_test.cpp
==============================================================================
--- branches/release/libs/container/test/deque_test.cpp	(original)
+++ branches/release/libs/container/test/deque_test.cpp	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -29,6 +29,7 @@
 #include "emplace_test.hpp"
 #include "propagate_allocator_test.hpp"
 #include "vector_test.hpp"
+#include <boost/detail/no_exceptions_support.hpp>
 
 using namespace boost::container;
 
@@ -143,7 +144,7 @@
    typedef deque<IntType>  MyCntDeque;
    typedef std::deque<int> MyStdDeque;
    const int max = 100;
-   try{
+   BOOST_TRY{
       //Shared memory allocator must be always be initialized
       //since it has no default constructor
       MyCntDeque *cntdeque = new MyCntDeque;
@@ -206,6 +207,20 @@
          stddeque->insert(stddeque->end(), aux_vect2, aux_vect2 + 50);
          if(!test::CheckEqualContainers(cntdeque, stddeque)) return false;
 
+         for(int i = 0; i < 50; ++i){
+            IntType move_me (i);
+            aux_vect[i] = boost::move(move_me);
+         }
+         for(int i = 0; i < 50; ++i){
+            aux_vect2[i] = i;
+         }
+
+         cntdeque->insert(cntdeque->begin()+cntdeque->size()
+                           ,boost::make_move_iterator(&aux_vect[0])
+                           ,boost::make_move_iterator(aux_vect + 50));
+         stddeque->insert(stddeque->begin()+stddeque->size(), aux_vect2, aux_vect2 + 50);
+         if(!test::CheckEqualContainers(cntdeque, stddeque)) return false;
+
          for(int i = 0, j = static_cast<int>(cntdeque->size()); i < j; ++i){
             cntdeque->erase(cntdeque->begin());
             stddeque->erase(stddeque->begin());
@@ -268,10 +283,13 @@
       delete cntdeque;
       delete stddeque;
    }
-   catch(std::exception &ex){
+   BOOST_CATCH(std::exception &ex){
+      #ifndef BOOST_NO_EXCEPTIONS
       std::cout << ex.what() << std::endl;
+      #endif
       return false;
    }
+   BOOST_CATCH_END
   
    std::cout << std::endl << "Test OK!" << std::endl;
    return true;
Modified: branches/release/libs/container/test/dummy_test_allocator.hpp
==============================================================================
--- branches/release/libs/container/test/dummy_test_allocator.hpp	(original)
+++ branches/release/libs/container/test/dummy_test_allocator.hpp	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -26,11 +26,11 @@
 #include <boost/container/detail/mpl.hpp>
 #include <boost/container/detail/version_type.hpp>
 #include <boost/container/detail/multiallocation_chain.hpp>
+#include <boost/container/throw_exception.hpp>
 #include <boost/move/utility.hpp>
 #include <memory>
 #include <algorithm>
 #include <cstddef>
-#include <stdexcept>
 #include <cassert>
 
 //!\file
@@ -314,15 +314,20 @@
    friend bool operator!=(const propagation_test_allocator &, const propagation_test_allocator &)
    {  return false;  }
 
+   void swap(propagation_test_allocator &r)
+   {
+      ++this->swaps_; ++r.swaps_;
+      boost::container::swap_dispatch(this->id_, r.id_);
+      boost::container::swap_dispatch(this->ctr_copies_, r.ctr_copies_);
+      boost::container::swap_dispatch(this->ctr_moves_, r.ctr_moves_);
+      boost::container::swap_dispatch(this->assign_copies_, r.assign_copies_);
+      boost::container::swap_dispatch(this->assign_moves_, r.assign_moves_);
+      boost::container::swap_dispatch(this->swaps_, r.swaps_);
+   }
+
    friend void swap(propagation_test_allocator &l, propagation_test_allocator &r)
    {
-      ++l.swaps_; ++r.swaps_;
-      container_detail::do_swap(l.id_, r.id_);
-      container_detail::do_swap(l.ctr_copies_, r.ctr_copies_);
-      container_detail::do_swap(l.ctr_moves_, r.ctr_moves_);
-      container_detail::do_swap(l.assign_copies_, r.assign_copies_);
-      container_detail::do_swap(l.assign_moves_, r.assign_moves_);
-      container_detail::do_swap(l.swaps_, r.swaps_);
+      l.swap(r);
    }
 
    unsigned int id_;
Modified: branches/release/libs/container/test/expand_bwd_test_allocator.hpp
==============================================================================
--- branches/release/libs/container/test/expand_bwd_test_allocator.hpp	(original)
+++ branches/release/libs/container/test/expand_bwd_test_allocator.hpp	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -19,6 +19,7 @@
 #include <boost/container/detail/workaround.hpp>
 
 #include <boost/container/container_fwd.hpp>
+#include <boost/container/throw_exception.hpp>
 #include <boost/container/detail/allocation_type.hpp>
 #include <boost/assert.hpp>
 #include <boost/container/detail/utilities.hpp>
@@ -26,7 +27,6 @@
 #include <memory>
 #include <algorithm>
 #include <cstddef>
-#include <stdexcept>
 #include <cassert>
 
 //!\file
@@ -112,9 +112,9 @@
 
    friend void swap(self_t &alloc1, self_t &alloc2)
    { 
-      container_detail::do_swap(alloc1.mp_buffer, alloc2.mp_buffer);
-      container_detail::do_swap(alloc1.m_size,    alloc2.m_size);
-      container_detail::do_swap(alloc1.m_offset,  alloc2.m_offset);
+      boost::container::swap_dispatch(alloc1.mp_buffer, alloc2.mp_buffer);
+      boost::container::swap_dispatch(alloc1.m_size,    alloc2.m_size);
+      boost::container::swap_dispatch(alloc1.m_offset,  alloc2.m_offset);
    }
 
    //Experimental version 2 expand_bwd_test_allocator functions
@@ -146,8 +146,8 @@
          return std::pair<pointer, bool>(mp_buffer, true);
       }
       else{
-         assert(0);
-         throw std::bad_alloc();
+         throw_bad_alloc();
+         return std::pair<pointer, bool>(mp_buffer, true);
       }
    }
 
Modified: branches/release/libs/container/test/expand_bwd_test_template.hpp
==============================================================================
--- branches/release/libs/container/test/expand_bwd_test_template.hpp	(original)
+++ branches/release/libs/container/test/expand_bwd_test_template.hpp	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -135,7 +135,7 @@
    for(int iteration = 0; iteration < Iterations; ++iteration)
    {
       value_type *memory = new value_type[MemorySize];
-      try {
+      BOOST_TRY {
          std::vector<non_volatile_value_type> initial_data;
          initial_data.resize(InitialSize[iteration]);
          for(int i = 0; i < InitialSize[iteration]; ++i){
@@ -165,10 +165,11 @@
             return false;
          }
       }
-      catch(...){
+      BOOST_CATCH(...){
          delete [](const_cast<non_volatile_value_type*>(memory));
-         throw;
+         BOOST_RETHROW;
       }
+      BOOST_CATCH_END
       delete [](const_cast<non_volatile_value_type*>(memory));
    }
 
@@ -193,7 +194,7 @@
    for(int iteration = 0; iteration <Iterations; ++iteration)
    {
       value_type *memory = new value_type[MemorySize];
-      try {
+      BOOST_TRY {
          //Create initial data
          std::vector<non_volatile_value_type> initial_data;
          initial_data.resize(InitialSize[iteration]);
@@ -227,10 +228,11 @@
             return false;
          }
       }
-      catch(...){
+      BOOST_CATCH(...){
          delete [](const_cast<typename boost::remove_volatile<value_type>::type*>(memory));
-         throw;
+         BOOST_RETHROW;
       }
+      BOOST_CATCH_END
       delete [](const_cast<typename boost::remove_volatile<value_type>::type*>(memory));
    }
 
Modified: branches/release/libs/container/test/flat_tree_test.cpp
==============================================================================
--- branches/release/libs/container/test/flat_tree_test.cpp	(original)
+++ branches/release/libs/container/test/flat_tree_test.cpp	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -116,6 +116,9 @@
    , std::allocator<test::movable_and_copyable_int>
    >;
 
+//As flat container iterators are typedefs for vector::[const_]iterator,
+//no need to explicit instantiate them
+
 }} //boost::container
 
 
Modified: branches/release/libs/container/test/heap_allocator_v1.hpp
==============================================================================
--- branches/release/libs/container/test/heap_allocator_v1.hpp	(original)
+++ branches/release/libs/container/test/heap_allocator_v1.hpp	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -28,7 +28,6 @@
 #include <memory>
 #include <algorithm>
 #include <cstddef>
-#include <stdexcept>
 
 //!\file
 //!Describes an heap_allocator_v1 that allocates portions of fixed size
@@ -134,7 +133,7 @@
    //!Swap segment manager. Does not throw. If each heap_allocator_v1 is placed in
    //!different memory segments, the result is undefined.
    friend void swap(self_t &alloc1, self_t &alloc2)
-   {  detail::do_swap(alloc1.mp_mngr, alloc2.mp_mngr);   }
+   {  boost::container::boost::container::swap_dispatch(alloc1.mp_mngr, alloc2.mp_mngr);   }
 };
 
 //!Equality test for same type of heap_allocator_v1
Modified: branches/release/libs/container/test/list_test.cpp
==============================================================================
--- branches/release/libs/container/test/list_test.cpp	(original)
+++ branches/release/libs/container/test/list_test.cpp	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -32,6 +32,15 @@
 template class boost::container::list<test::movable_and_copyable_int,
    std::allocator<test::movable_and_copyable_int> >;
 
+namespace container_detail {
+
+template class list_const_iterator
+   <int, intrusive_list_type< std::allocator<int> >::container_type::iterator >;
+template class list_iterator
+   <int, intrusive_list_type< std::allocator<int> >::container_type::iterator>;
+
+}
+
 }}
 
 typedef list<int> MyList;
Modified: branches/release/libs/container/test/list_test.hpp
==============================================================================
--- branches/release/libs/container/test/list_test.hpp	(original)
+++ branches/release/libs/container/test/list_test.hpp	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -148,7 +148,7 @@
    const int max = 100;
    typedef list_push_data_function<DoublyLinked> push_data_t;
 
-   try{
+   BOOST_TRY{
       MyBoostList *boostlist = new MyBoostList;
       MyStdList *stdlist = new MyStdList;
 
@@ -338,9 +338,10 @@
       delete boostlist;
       delete stdlist;
    }
-   catch(...){
-      throw;
+   BOOST_CATCH(...){
+      BOOST_RETHROW;
    }
+   BOOST_CATCH_END
    return 0;
 }
 
Modified: branches/release/libs/container/test/map_test.hpp
==============================================================================
--- branches/release/libs/container/test/map_test.hpp	(original)
+++ branches/release/libs/container/test/map_test.hpp	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -44,7 +44,7 @@
    typedef typename MyStdMap::value_type  StdPairType;
    const int max = 100;
 
-   try{
+   BOOST_TRY{
       MyBoostMap *boostmap = new MyBoostMap;
       MyStdMap *stdmap = new MyStdMap;
       MyBoostMultiMap *boostmultimap = new MyBoostMultiMap;
@@ -179,14 +179,14 @@
          if(!CheckEqualPairContainers(boostmap, stdmap)) return 1;
          if(!CheckEqualPairContainers(boostmultimap, stdmultimap)) return 1;
 
-         typename MyBoostMap::iterator it;
+         typename MyBoostMap::iterator it = boostmap->begin();
          typename MyBoostMap::const_iterator cit = it;
          (void)cit;
 
-         boostmap->erase(boostmap->begin()++);
-         stdmap->erase(stdmap->begin()++);
-         boostmultimap->erase(boostmultimap->begin()++);
-         stdmultimap->erase(stdmultimap->begin()++);
+         boostmap->erase(boostmap->begin());
+         stdmap->erase(stdmap->begin());
+         boostmultimap->erase(boostmultimap->begin());
+         stdmultimap->erase(stdmultimap->begin());
          if(!CheckEqualPairContainers(boostmap, stdmap)) return 1;
          if(!CheckEqualPairContainers(boostmultimap, stdmultimap)) return 1;
 
@@ -467,9 +467,10 @@
       delete boostmultimap;
       delete stdmultimap;
    }
-   catch(...){
-      throw;
+   BOOST_CATCH(...){
+      BOOST_RETHROW;
    }
+   BOOST_CATCH_END
    return 0;
 }
 
@@ -485,7 +486,7 @@
 
    const int max = 100;
 
-   try{
+   BOOST_TRY{
    MyBoostMap *boostmap = new MyBoostMap;
    MyStdMap *stdmap = new MyStdMap;
    MyBoostMultiMap *boostmultimap = new MyBoostMultiMap;
@@ -537,9 +538,10 @@
          delete stdmultimap;
       }
    }
-   catch(...){
-      throw;
+   BOOST_CATCH(...){
+      BOOST_RETHROW;
    }
+   BOOST_CATCH_END
    return 0;
 }
 
Modified: branches/release/libs/container/test/movable_int.hpp
==============================================================================
--- branches/release/libs/container/test/movable_int.hpp	(original)
+++ branches/release/libs/container/test/movable_int.hpp	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -53,23 +53,26 @@
    movable_int & operator= (int i)
    {  this->m_int = i;  return *this;  }
 
-   bool operator ==(const movable_int &mi) const
-   {  return this->m_int == mi.m_int;   }
+   ~movable_int()
+   {  this->m_int = 0;  }
 
-   bool operator !=(const movable_int &mi) const
-   {  return this->m_int != mi.m_int;   }
+   friend bool operator ==(const movable_int &l, const movable_int &r)
+   {  return l.m_int == r.m_int;   }
 
-   bool operator <(const movable_int &mi) const
-   {  return this->m_int < mi.m_int;   }
+   friend bool operator !=(const movable_int &l, const movable_int &r)
+   {  return l.m_int != r.m_int;   }
 
-   bool operator <=(const movable_int &mi) const
-   {  return this->m_int <= mi.m_int;   }
+   friend bool operator <(const movable_int &l, const movable_int &r)
+   {  return l.m_int < r.m_int;   }
 
-   bool operator >=(const movable_int &mi) const
-   {  return this->m_int >= mi.m_int;   }
+   friend bool operator <=(const movable_int &l, const movable_int &r)
+   {  return l.m_int <= r.m_int;   }
 
-   bool operator >(const movable_int &mi) const
-   {  return this->m_int > mi.m_int;   }
+   friend bool operator >=(const movable_int &l, const movable_int &r)
+   {  return l.m_int >= r.m_int;   }
+
+   friend bool operator >(const movable_int &l, const movable_int &r)
+   {  return l.m_int > r.m_int;   }
 
    int get_int() const
    {  return m_int;  }
@@ -84,6 +87,9 @@
    int m_int;
 };
 
+inline movable_int produce_movable_int()
+{  return movable_int();  }
+
 template<class E, class T>
 std::basic_ostream<E, T> & operator<<
    (std::basic_ostream<E, T> & os, movable_int const & p)
@@ -93,7 +99,6 @@
     return os;
 }
 
-
 template<>
 struct is_copyable<movable_int>
 {
@@ -121,6 +126,9 @@
       :  m_int(mmi.m_int)
    {  mmi.m_int = 0; }
 
+   ~movable_and_copyable_int()
+   {  this->m_int = 0;  }
+
    movable_and_copyable_int &operator= (BOOST_COPY_ASSIGN_REF(movable_and_copyable_int) mi)
    {  this->m_int = mi.m_int;    return *this;  }
 
@@ -130,23 +138,23 @@
    movable_and_copyable_int & operator= (int i)
    {  this->m_int = i;  return *this;  }
 
-   bool operator ==(const movable_and_copyable_int &mi) const
-   {  return this->m_int == mi.m_int;   }
+   friend bool operator ==(const movable_and_copyable_int &l, const movable_and_copyable_int &r)
+   {  return l.m_int == r.m_int;   }
 
-   bool operator !=(const movable_and_copyable_int &mi) const
-   {  return this->m_int != mi.m_int;   }
+   friend bool operator !=(const movable_and_copyable_int &l, const movable_and_copyable_int &r)
+   {  return l.m_int != r.m_int;   }
 
-   bool operator <(const movable_and_copyable_int &mi) const
-   {  return this->m_int < mi.m_int;   }
+   friend bool operator <(const movable_and_copyable_int &l, const movable_and_copyable_int &r)
+   {  return l.m_int < r.m_int;   }
 
-   bool operator <=(const movable_and_copyable_int &mi) const
-   {  return this->m_int <= mi.m_int;   }
+   friend bool operator <=(const movable_and_copyable_int &l, const movable_and_copyable_int &r)
+   {  return l.m_int <= r.m_int;   }
 
-   bool operator >=(const movable_and_copyable_int &mi) const
-   {  return this->m_int >= mi.m_int;   }
+   friend bool operator >=(const movable_and_copyable_int &l, const movable_and_copyable_int &r)
+   {  return l.m_int >= r.m_int;   }
 
-   bool operator >(const movable_and_copyable_int &mi) const
-   {  return this->m_int > mi.m_int;   }
+   friend bool operator >(const movable_and_copyable_int &l, const movable_and_copyable_int &r)
+   {  return l.m_int > r.m_int;   }
 
    int get_int() const
    {  return m_int;  }
@@ -161,6 +169,9 @@
    int m_int;
 };
 
+inline movable_and_copyable_int produce_movable_and_copyable_int()
+{  return movable_and_copyable_int();  }
+
 template<class E, class T>
 std::basic_ostream<E, T> & operator<<
    (std::basic_ostream<E, T> & os, movable_and_copyable_int const & p)
@@ -194,23 +205,29 @@
    copyable_int & operator= (int i)
    {  this->m_int = i;  return *this;  }
 
-   bool operator ==(const copyable_int &mi) const
-   {  return this->m_int == mi.m_int;   }
+   copyable_int & operator= (const copyable_int &ci)
+   {  this->m_int = ci.m_int;  return *this;  }
 
-   bool operator !=(const copyable_int &mi) const
-   {  return this->m_int != mi.m_int;   }
+   ~copyable_int()
+   {  this->m_int = 0;  }
 
-   bool operator <(const copyable_int &mi) const
-   {  return this->m_int < mi.m_int;   }
+   friend bool operator ==(const copyable_int &l, const copyable_int &r)
+   {  return l.m_int == r.m_int;   }
 
-   bool operator <=(const copyable_int &mi) const
-   {  return this->m_int <= mi.m_int;   }
+   friend bool operator !=(const copyable_int &l, const copyable_int &r)
+   {  return l.m_int != r.m_int;   }
 
-   bool operator >=(const copyable_int &mi) const
-   {  return this->m_int >= mi.m_int;   }
+   friend bool operator <(const copyable_int &l, const copyable_int &r)
+   {  return l.m_int < r.m_int;   }
 
-   bool operator >(const copyable_int &mi) const
-   {  return this->m_int > mi.m_int;   }
+   friend bool operator <=(const copyable_int &l, const copyable_int &r)
+   {  return l.m_int <= r.m_int;   }
+
+   friend bool operator >=(const copyable_int &l, const copyable_int &r)
+   {  return l.m_int >= r.m_int;   }
+
+   friend bool operator >(const copyable_int &l, const copyable_int &r)
+   {  return l.m_int > r.m_int;   }
 
    int get_int() const
    {  return m_int;  }
@@ -225,6 +242,9 @@
    int m_int;
 };
 
+inline copyable_int produce_copyable_int()
+{  return copyable_int();  }
+
 template<class E, class T>
 std::basic_ostream<E, T> & operator<<
    (std::basic_ostream<E, T> & os, copyable_int const & p)
@@ -254,6 +274,9 @@
       :  m_int(a)
    {}
 
+   ~non_copymovable_int()
+   {  m_int = 0;  }
+
    bool operator ==(const non_copymovable_int &mi) const
    {  return this->m_int == mi.m_int;   }
 
Modified: branches/release/libs/container/test/set_test.hpp
==============================================================================
--- branches/release/libs/container/test/set_test.hpp	(original)
+++ branches/release/libs/container/test/set_test.hpp	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -143,20 +143,20 @@
       return 1;
    }
 
-   typename MyBoostSet::iterator it;
+   typename MyBoostSet::iterator it = boostset->begin();
    typename MyBoostSet::const_iterator cit = it;
    (void)cit;
 
-   boostset->erase(boostset->begin()++);
-   stdset->erase(stdset->begin()++);
-   boostmultiset->erase(boostmultiset->begin()++);
-   stdmultiset->erase(stdmultiset->begin()++);
+   boostset->erase(boostset->begin());
+   stdset->erase(stdset->begin());
+   boostmultiset->erase(boostmultiset->begin());
+   stdmultiset->erase(stdmultiset->begin());
    if(!CheckEqualContainers(boostset, stdset)){
-      std::cout << "Error in boostset->erase(boostset->begin()++)" << std::endl;
+      std::cout << "Error in boostset->erase(boostset->begin())" << std::endl;
       return 1;
    }
    if(!CheckEqualContainers(boostmultiset, stdmultiset)){
-      std::cout << "Error in boostmultiset->erase(boostmultiset->begin()++)" << std::endl;
+      std::cout << "Error in boostmultiset->erase(boostmultiset->begin())" << std::endl;
       return 1;
    }
 
@@ -443,7 +443,7 @@
    typedef typename MyBoostSet::value_type IntType;
    const int max = 100;
 
-   try{
+   BOOST_TRY{
       //Shared memory allocator must be always be initialized
       //since it has no default constructor
       MyBoostSet *boostset = new MyBoostSet;
@@ -492,9 +492,10 @@
       delete boostset;
       delete boostmultiset;
    }
-   catch(...){
-      throw;
+   BOOST_CATCH(...){
+      BOOST_RETHROW;
    }
+   BOOST_CATCH_END
    return 0;
 }
 
Modified: branches/release/libs/container/test/slist_test.cpp
==============================================================================
--- branches/release/libs/container/test/slist_test.cpp	(original)
+++ branches/release/libs/container/test/slist_test.cpp	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -30,6 +30,16 @@
 
 template class boost::container::slist<test::movable_and_copyable_int,
    std::allocator<test::movable_and_copyable_int> >;
+
+namespace container_detail {
+
+template class slist_const_iterator
+   <int, intrusive_slist_type< std::allocator<int> >::container_type::iterator >;
+template class slist_iterator
+   <int, intrusive_slist_type< std::allocator<int> >::container_type::iterator>;
+
+}
+
 }}
 
 typedef slist<int> MyList;
Modified: branches/release/libs/container/test/stable_vector_test.cpp
==============================================================================
--- branches/release/libs/container/test/stable_vector_test.cpp	(original)
+++ branches/release/libs/container/test/stable_vector_test.cpp	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -39,6 +39,13 @@
 template class stable_vector<test::movable_and_copyable_int,
    std::allocator<test::movable_and_copyable_int> >;
 
+namespace stable_vector_detail{
+
+template class iterator< int, int &, int *>;
+template class iterator< int, const int &, const int *>;
+
+}
+
 }}
 
 class recursive_vector
Copied: branches/release/libs/container/test/static_vector_test.cpp (from r83049, /trunk/libs/container/test/static_vector_test.cpp)
==============================================================================
--- /trunk/libs/container/test/static_vector_test.cpp	(original)
+++ branches/release/libs/container/test/static_vector_test.cpp	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -11,49 +11,19 @@
 #include <boost/detail/lightweight_test.hpp>
 #include <boost/detail/no_exceptions_support.hpp>
 
-namespace boost  {
-namespace container {
-namespace test {
-
-//lightweight_test.hpp does not offer support to check if an operation throws
-//so write our own macro
-inline void throw_failed_impl(char const * excep, char const * file, int line, char const * function)
-{
-    BOOST_LIGHTWEIGHT_TEST_OSTREAM
-      << file << "(" << line << "): Exception '" << excep << "' not thrown in function '"
-      << function << "'" << std::endl;
-    ++boost::detail::test_errors();
-}
-
-}  //namespace detail {
-}  //namespace container {
-}  //namespace boost  {
-
-#define BOOST_TEST_THROW( S, E )                            \
-   try {                                                    \
-      S;                                                    \
-      ::boost::container::test::throw_failed_impl           \
-         (#E, __FILE__, __LINE__, BOOST_CURRENT_FUNCTION);  \
-   }                                                        \
-   catch( E const&) {                                       \
-   }                                                        \
-//
-
 // TODO: Disable parts of the unit test that should not run when BOOST_NO_EXCEPTIONS
 // if exceptions are enabled there must be a user defined throw_exception function
 #ifdef BOOST_NO_EXCEPTIONS
 namespace boost {
-    void throw_exception(std::exception const & e){}; // user defined
+   void throw_exception(std::exception const &){}; // user defined
 } // namespace boost
 #endif // BOOST_NO_EXCEPTIONS
 
 #include <vector>
 #include <list>
 
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
 #include <boost/container/vector.hpp>
 #include <boost/container/stable_vector.hpp>
-#endif
 
 #include "static_vector_test.hpp"
 
@@ -69,735 +39,695 @@
 template <typename T, size_t N>
 void test_ctor_ndc()
 {
-    static_vector<T, N> s;
-    BOOST_TEST_EQ(s.size() , 0u);
-    BOOST_TEST(s.capacity() == N);
-#ifndef BOOST_NO_EXCEPTIONS
-    BOOST_TEST_THROW( s.at(0u), std::out_of_range );
-#endif // BOOST_NO_EXCEPTIONS
+   static_vector<T, N> s;
+   BOOST_TEST_EQ(s.size() , 0u);
+   BOOST_TEST(s.capacity() == N);
+   BOOST_TEST_THROWS( s.at(0u), std::out_of_range );
 }
 
 template <typename T, size_t N>
 void test_ctor_nc(size_t n)
 {
-    static_vector<T, N> s(n);
-    BOOST_TEST(s.size() == n);
-    BOOST_TEST(s.capacity() == N);
-#ifndef BOOST_NO_EXCEPTIONS
-    BOOST_TEST_THROW( s.at(n), std::out_of_range );
-#endif // BOOST_NO_EXCEPTIONS
-    if ( 1 < n )
-    {
-        T val10(10);
-        s[0] = val10;
-        BOOST_TEST(T(10) == s[0]);
-        BOOST_TEST(T(10) == s.at(0));
-        T val20(20);
-        s.at(1) = val20;
-        BOOST_TEST(T(20) == s[1]);
-        BOOST_TEST(T(20) == s.at(1));
-    }
+   static_vector<T, N> s(n);
+   BOOST_TEST(s.size() == n);
+   BOOST_TEST(s.capacity() == N);
+   BOOST_TEST_THROWS( s.at(n), std::out_of_range );
+   if ( 1 < n )
+   {
+      T val10(10);
+      s[0] = val10;
+      BOOST_TEST(T(10) == s[0]);
+      BOOST_TEST(T(10) == s.at(0));
+      T val20(20);
+      s.at(1) = val20;
+      BOOST_TEST(T(20) == s[1]);
+      BOOST_TEST(T(20) == s.at(1));
+   }
 }
 
 template <typename T, size_t N>
 void test_ctor_nd(size_t n, T const& v)
 {
-    static_vector<T, N> s(n, v);
-    BOOST_TEST(s.size() == n);
-    BOOST_TEST(s.capacity() == N);
-#ifndef BOOST_NO_EXCEPTIONS
-    BOOST_TEST_THROW( s.at(n), std::out_of_range );
-#endif // BOOST_NO_EXCEPTIONS
-    if ( 1 < n )
-    {
-        BOOST_TEST(v == s[0]);
-        BOOST_TEST(v == s.at(0));
-        BOOST_TEST(v == s[1]);
-        BOOST_TEST(v == s.at(1));
-        s[0] = T(10);
-        BOOST_TEST(T(10) == s[0]);
-        BOOST_TEST(T(10) == s.at(0));
-        s.at(1) = T(20);
-        BOOST_TEST(T(20) == s[1]);
-        BOOST_TEST(T(20) == s.at(1));
-    }
+   static_vector<T, N> s(n, v);
+   BOOST_TEST(s.size() == n);
+   BOOST_TEST(s.capacity() == N);
+   BOOST_TEST_THROWS( s.at(n), std::out_of_range );
+   if ( 1 < n )
+   {
+      BOOST_TEST(v == s[0]);
+      BOOST_TEST(v == s.at(0));
+      BOOST_TEST(v == s[1]);
+      BOOST_TEST(v == s.at(1));
+      s[0] = T(10);
+      BOOST_TEST(T(10) == s[0]);
+      BOOST_TEST(T(10) == s.at(0));
+      s.at(1) = T(20);
+      BOOST_TEST(T(20) == s[1]);
+      BOOST_TEST(T(20) == s.at(1));
+   }
 }
 
 template <typename T, size_t N>
 void test_resize_nc(size_t n)
 {
-    static_vector<T, N> s;
+   static_vector<T, N> s;
 
-    s.resize(n);
-    BOOST_TEST(s.size() == n);
-    BOOST_TEST(s.capacity() == N);
-#ifndef BOOST_NO_EXCEPTIONS
-    BOOST_TEST_THROW( s.at(n), std::out_of_range );
-#endif // BOOST_NO_EXCEPTIONS
-    if ( 1 < n )
-    {
-        T val10(10);
-        s[0] = val10;
-        BOOST_TEST(T(10) == s[0]);
-        BOOST_TEST(T(10) == s.at(0));
-        T val20(20);
-        s.at(1) = val20;
-        BOOST_TEST(T(20) == s[1]);
-        BOOST_TEST(T(20) == s.at(1));
-    }
+   s.resize(n);
+   BOOST_TEST(s.size() == n);
+   BOOST_TEST(s.capacity() == N);
+   BOOST_TEST_THROWS( s.at(n), std::out_of_range );
+   if ( 1 < n )
+   {
+      T val10(10);
+      s[0] = val10;
+      BOOST_TEST(T(10) == s[0]);
+      BOOST_TEST(T(10) == s.at(0));
+      T val20(20);
+      s.at(1) = val20;
+      BOOST_TEST(T(20) == s[1]);
+      BOOST_TEST(T(20) == s.at(1));
+   }
 }
 
 template <typename T, size_t N>
 void test_resize_nd(size_t n, T const& v)
 {
-    static_vector<T, N> s;
+   static_vector<T, N> s;
 
-    s.resize(n, v);
-    BOOST_TEST(s.size() == n);
-    BOOST_TEST(s.capacity() == N);
-#ifndef BOOST_NO_EXCEPTIONS
-    BOOST_TEST_THROW( s.at(n), std::out_of_range );
-#endif // BOOST_NO_EXCEPTIONS
-    if ( 1 < n )
-    {
-        BOOST_TEST(v == s[0]);
-        BOOST_TEST(v == s.at(0));
-        BOOST_TEST(v == s[1]);
-        BOOST_TEST(v == s.at(1));
-        s[0] = T(10);
-        BOOST_TEST(T(10) == s[0]);
-        BOOST_TEST(T(10) == s.at(0));
-        s.at(1) = T(20);
-        BOOST_TEST(T(20) == s[1]);
-        BOOST_TEST(T(20) == s.at(1));
-    }
+   s.resize(n, v);
+   BOOST_TEST(s.size() == n);
+   BOOST_TEST(s.capacity() == N);
+   BOOST_TEST_THROWS( s.at(n), std::out_of_range );
+   if ( 1 < n )
+   {
+      BOOST_TEST(v == s[0]);
+      BOOST_TEST(v == s.at(0));
+      BOOST_TEST(v == s[1]);
+      BOOST_TEST(v == s.at(1));
+      s[0] = T(10);
+      BOOST_TEST(T(10) == s[0]);
+      BOOST_TEST(T(10) == s.at(0));
+      s.at(1) = T(20);
+      BOOST_TEST(T(20) == s[1]);
+      BOOST_TEST(T(20) == s.at(1));
+   }
 }
 
 template <typename T, size_t N>
 void test_push_back_nd()
 {
-    static_vector<T, N> s;
+   static_vector<T, N> s;
 
-    BOOST_TEST(s.size() == 0);
-#ifndef BOOST_NO_EXCEPTIONS
-    BOOST_TEST_THROW( s.at(0), std::out_of_range );
-#endif // BOOST_NO_EXCEPTIONS
+   BOOST_TEST(s.size() == 0);
+   BOOST_TEST_THROWS( s.at(0), std::out_of_range );
 
-    for ( size_t i = 0 ; i < N ; ++i )
-    {
-        T t(i);
-        s.push_back(t);
-        BOOST_TEST(s.size() == i + 1);
-#ifndef BOOST_NO_EXCEPTIONS
-        BOOST_TEST_THROW( s.at(i + 1), std::out_of_range );
-#endif // BOOST_NO_EXCEPTIONS
-        BOOST_TEST(T(i) == s.at(i));
-        BOOST_TEST(T(i) == s[i]);
-        BOOST_TEST(T(i) == s.back());
-        BOOST_TEST(T(0) == s.front());
-        BOOST_TEST(T(i) == *(s.data() + i));
-    }
+   for ( size_t i = 0 ; i < N ; ++i )
+   {
+      T t(i);
+      s.push_back(t);
+      BOOST_TEST(s.size() == i + 1);
+      BOOST_TEST_THROWS( s.at(i + 1), std::out_of_range );
+      BOOST_TEST(T(i) == s.at(i));
+      BOOST_TEST(T(i) == s[i]);
+      BOOST_TEST(T(i) == s.back());
+      BOOST_TEST(T(0) == s.front());
+      BOOST_TEST(T(i) == *(s.data() + i));
+   }
 }
 
 template <typename T, size_t N>
 void test_pop_back_nd()
 {
-    static_vector<T, N> s;
+   static_vector<T, N> s;
 
-    for ( size_t i = 0 ; i < N ; ++i )
-    {
-        T t(i);
-        s.push_back(t);
-    }
-
-    for ( size_t i = N ; i > 1 ; --i )
-    {
-        s.pop_back();
-        BOOST_TEST(s.size() == i - 1);
-#ifndef BOOST_NO_EXCEPTIONS
-        BOOST_TEST_THROW( s.at(i - 1), std::out_of_range );
-#endif // BOOST_NO_EXCEPTIONS
-        BOOST_TEST(T(i - 2) == s.at(i - 2));
-        BOOST_TEST(T(i - 2) == s[i - 2]);
-        BOOST_TEST(T(i - 2) == s.back());
-        BOOST_TEST(T(0) == s.front());
-    }
+   for ( size_t i = 0 ; i < N ; ++i )
+   {
+      T t(i);
+      s.push_back(t);
+   }
+
+   for ( size_t i = N ; i > 1 ; --i )
+   {
+      s.pop_back();
+      BOOST_TEST(s.size() == i - 1);
+      BOOST_TEST_THROWS( s.at(i - 1), std::out_of_range );
+      BOOST_TEST(T(i - 2) == s.at(i - 2));
+      BOOST_TEST(T(i - 2) == s[i - 2]);
+      BOOST_TEST(T(i - 2) == s.back());
+      BOOST_TEST(T(0) == s.front());
+   }
 }
 
 template <typename It1, typename It2>
 void test_compare_ranges(It1 first1, It1 last1, It2 first2, It2 last2)
 {
-    BOOST_TEST(std::distance(first1, last1) == std::distance(first2, last2));
-    for ( ; first1 != last1 && first2 != last2 ; ++first1, ++first2 )
-        BOOST_TEST(*first1 == *first2);
+   BOOST_TEST(std::distance(first1, last1) == std::distance(first2, last2));
+   for ( ; first1 != last1 && first2 != last2 ; ++first1, ++first2 )
+      BOOST_TEST(*first1 == *first2);
 }
 
 template <typename T, size_t N, typename C>
 void test_copy_and_assign(C const& c)
 {
-    {
-        static_vector<T, N> s(c.begin(), c.end());
-        BOOST_TEST(s.size() == c.size());
-        test_compare_ranges(s.begin(), s.end(), c.begin(), c.end());
-    }
-    {
-        static_vector<T, N> s;
-        BOOST_TEST(0 == s.size());
-        s.assign(c.begin(), c.end());
-        BOOST_TEST(s.size() == c.size());
-        test_compare_ranges(s.begin(), s.end(), c.begin(), c.end());
-    }
+   {
+      static_vector<T, N> s(c.begin(), c.end());
+      BOOST_TEST(s.size() == c.size());
+      test_compare_ranges(s.begin(), s.end(), c.begin(), c.end());
+   }
+   {
+      static_vector<T, N> s;
+      BOOST_TEST(0 == s.size());
+      s.assign(c.begin(), c.end());
+      BOOST_TEST(s.size() == c.size());
+      test_compare_ranges(s.begin(), s.end(), c.begin(), c.end());
+   }
 }
 
 template <typename T, size_t N>
 void test_copy_and_assign_nd(T const& val)
 {
-    static_vector<T, N> s;
-    std::vector<T> v;
-    std::list<T> l;
-
-    for ( size_t i = 0 ; i < N ; ++i )
-    {
-        T t(i);
-        s.push_back(t);
-        v.push_back(t);
-        l.push_back(t);
-    }
-    // copy ctor
-    {
-        static_vector<T, N> s1(s);
-        BOOST_TEST(s.size() == s1.size());
-        test_compare_ranges(s.begin(), s.end(), s1.begin(), s1.end());
-    }
-    // copy assignment
-    {
-        static_vector<T, N> s1;
-        BOOST_TEST(0 == s1.size());
-        s1 = s;
-        BOOST_TEST(s.size() == s1.size());
-        test_compare_ranges(s.begin(), s.end(), s1.begin(), s1.end());
-    }
-
-    // ctor(Iter, Iter) and assign(Iter, Iter)
-    test_copy_and_assign<T, N>(s);
-    test_copy_and_assign<T, N>(v);
-    test_copy_and_assign<T, N>(l);
-
-    // assign(N, V)
-    {
-        static_vector<T, N> s1(s);
-        test_compare_ranges(s.begin(), s.end(), s1.begin(), s1.end());
-        std::vector<T> a(N, val);
-        s1.assign(N, val);
-        test_compare_ranges(a.begin(), a.end(), s1.begin(), s1.end());
-    }
-
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
-    stable_vector<T> bsv(s.begin(), s.end());
-    vector<T> bv(s.begin(), s.end());
-    test_copy_and_assign<T, N>(bsv);
-    test_copy_and_assign<T, N>(bv);
-#endif
+   static_vector<T, N> s;
+   std::vector<T> v;
+   std::list<T> l;
+
+   for ( size_t i = 0 ; i < N ; ++i )
+   {
+      T t(i);
+      s.push_back(t);
+      v.push_back(t);
+      l.push_back(t);
+   }
+   // copy ctor
+   {
+      static_vector<T, N> s1(s);
+      BOOST_TEST(s.size() == s1.size());
+      test_compare_ranges(s.begin(), s.end(), s1.begin(), s1.end());
+   }
+   // copy assignment
+   {
+      static_vector<T, N> s1;
+      BOOST_TEST(0 == s1.size());
+      s1 = s;
+      BOOST_TEST(s.size() == s1.size());
+      test_compare_ranges(s.begin(), s.end(), s1.begin(), s1.end());
+   }
+
+   // ctor(Iter, Iter) and assign(Iter, Iter)
+   test_copy_and_assign<T, N>(s);
+   test_copy_and_assign<T, N>(v);
+   test_copy_and_assign<T, N>(l);
+
+   // assign(N, V)
+   {
+      static_vector<T, N> s1(s);
+      test_compare_ranges(s.begin(), s.end(), s1.begin(), s1.end());
+      std::vector<T> a(N, val);
+      s1.assign(N, val);
+      test_compare_ranges(a.begin(), a.end(), s1.begin(), s1.end());
+   }
+
+   stable_vector<T> bsv(s.begin(), s.end());
+   vector<T> bv(s.begin(), s.end());
+   test_copy_and_assign<T, N>(bsv);
+   test_copy_and_assign<T, N>(bv);
 }
 
 template <typename T, size_t N>
 void test_iterators_nd()
 {
-    static_vector<T, N> s;
-    std::vector<T> v;
+   static_vector<T, N> s;
+   std::vector<T> v;
 
-    for ( size_t i = 0 ; i < N ; ++i )
-    {
-        s.push_back(T(i));
-        v.push_back(T(i));
-    }
+   for ( size_t i = 0 ; i < N ; ++i )
+   {
+      s.push_back(T(i));
+      v.push_back(T(i));
+   }
 
-    test_compare_ranges(s.begin(), s.end(), v.begin(), v.end());
-    test_compare_ranges(s.rbegin(), s.rend(), v.rbegin(), v.rend());
+   test_compare_ranges(s.begin(), s.end(), v.begin(), v.end());
+   test_compare_ranges(s.rbegin(), s.rend(), v.rbegin(), v.rend());
 
-    s.assign(v.rbegin(), v.rend());
+   s.assign(v.rbegin(), v.rend());
 
-    test_compare_ranges(s.begin(), s.end(), v.rbegin(), v.rend());
-    test_compare_ranges(s.rbegin(), s.rend(), v.begin(), v.end());
+   test_compare_ranges(s.begin(), s.end(), v.rbegin(), v.rend());
+   test_compare_ranges(s.rbegin(), s.rend(), v.begin(), v.end());
 }
 
 template <typename T, size_t N>
 void test_erase_nd()
 {
-    static_vector<T, N> s;
-    typedef typename static_vector<T, N>::iterator It;
+   static_vector<T, N> s;
+   typedef typename static_vector<T, N>::iterator It;
 
-    for ( size_t i = 0 ; i < N ; ++i )
-        s.push_back(T(i));
+   for ( size_t i = 0 ; i < N ; ++i )
+      s.push_back(T(i));
 
-    // erase(pos)
-    {
-        for ( size_t i = 0 ; i < N ; ++i )
-        {
-            static_vector<T, N> s1(s);
-            It it = s1.erase(s1.begin() + i);
-            BOOST_TEST(s1.begin() + i == it);
-            BOOST_TEST(s1.size() == N - 1);
-            for ( size_t j = 0 ; j < i ; ++j )
-                BOOST_TEST(s1[j] == T(j));
-            for ( size_t j = i+1 ; j < N ; ++j )
-                BOOST_TEST(s1[j-1] == T(j));
-        }
-    }
-    // erase(first, last)
-    {
-        size_t n = N/3;
-        for ( size_t i = 0 ; i <= N ; ++i )
-        {
-            static_vector<T, N> s1(s);
-            size_t removed = i + n < N ? n : N - i;
-            It it = s1.erase(s1.begin() + i, s1.begin() + i + removed);
-            BOOST_TEST(s1.begin() + i == it);
-            BOOST_TEST(s1.size() == N - removed);
-            for ( size_t j = 0 ; j < i ; ++j )
-                BOOST_TEST(s1[j] == T(j));
-            for ( size_t j = i+n ; j < N ; ++j )
-                BOOST_TEST(s1[j-n] == T(j));
-        }
-    }
+   // erase(pos)
+   {
+      for ( size_t i = 0 ; i < N ; ++i )
+      {
+          static_vector<T, N> s1(s);
+          It it = s1.erase(s1.begin() + i);
+          BOOST_TEST(s1.begin() + i == it);
+          BOOST_TEST(s1.size() == N - 1);
+          for ( size_t j = 0 ; j < i ; ++j )
+              BOOST_TEST(s1[j] == T(j));
+          for ( size_t j = i+1 ; j < N ; ++j )
+              BOOST_TEST(s1[j-1] == T(j));
+      }
+   }
+   // erase(first, last)
+   {
+      size_t n = N/3;
+      for ( size_t i = 0 ; i <= N ; ++i )
+      {
+          static_vector<T, N> s1(s);
+          size_t removed = i + n < N ? n : N - i;
+          It it = s1.erase(s1.begin() + i, s1.begin() + i + removed);
+          BOOST_TEST(s1.begin() + i == it);
+          BOOST_TEST(s1.size() == N - removed);
+          for ( size_t j = 0 ; j < i ; ++j )
+              BOOST_TEST(s1[j] == T(j));
+          for ( size_t j = i+n ; j < N ; ++j )
+              BOOST_TEST(s1[j-n] == T(j));
+      }
+   }
 }
 
 template <typename T, size_t N, typename SV, typename C>
 void test_insert(SV const& s, C const& c)
 {
-    size_t h = N/2;
-    size_t n = size_t(h/1.5f);
+   size_t h = N/2;
+   size_t n = size_t(h/1.5f);
 
-    for ( size_t i = 0 ; i <= h ; ++i )
-    {
-        static_vector<T, N> s1(s);
-
-        typename C::const_iterator it = c.begin();
-        std::advance(it, n);
-        typename static_vector<T, N>::iterator
-            it1 = s1.insert(s1.begin() + i, c.begin(), it);
-
-        BOOST_TEST(s1.begin() + i == it1);
-        BOOST_TEST(s1.size() == h+n);
-        for ( size_t j = 0 ; j < i ; ++j )
-            BOOST_TEST(s1[j] == T(j));
-        for ( size_t j = 0 ; j < n ; ++j )
-            BOOST_TEST(s1[j+i] == T(100 + j));
-        for ( size_t j = 0 ; j < h-i ; ++j )
-            BOOST_TEST(s1[j+i+n] == T(j+i));
-    }
+   for ( size_t i = 0 ; i <= h ; ++i )
+   {
+      static_vector<T, N> s1(s);
+
+      typename C::const_iterator it = c.begin();
+      std::advance(it, n);
+      typename static_vector<T, N>::iterator
+          it1 = s1.insert(s1.begin() + i, c.begin(), it);
+
+      BOOST_TEST(s1.begin() + i == it1);
+      BOOST_TEST(s1.size() == h+n);
+      for ( size_t j = 0 ; j < i ; ++j )
+          BOOST_TEST(s1[j] == T(j));
+      for ( size_t j = 0 ; j < n ; ++j )
+          BOOST_TEST(s1[j+i] == T(100 + j));
+      for ( size_t j = 0 ; j < h-i ; ++j )
+          BOOST_TEST(s1[j+i+n] == T(j+i));
+   }
 }
 
 template <typename T, size_t N>
 void test_insert_nd(T const& val)
 {
-    size_t h = N/2;
+   size_t h = N/2;
 
-    static_vector<T, N> s, ss;
-    std::vector<T> v;
-    std::list<T> l;
-
-    typedef typename static_vector<T, N>::iterator It;
-
-    for ( size_t i = 0 ; i < h ; ++i )
-    {
-        s.push_back(T(i));
-        ss.push_back(T(100 + i));
-        v.push_back(T(100 + i));
-        l.push_back(T(100 + i));
-    }
-
-    // insert(pos, val)
-    {
-        for ( size_t i = 0 ; i <= h ; ++i )
-        {
-            static_vector<T, N> s1(s);
-            It it = s1.insert(s1.begin() + i, val);
-            BOOST_TEST(s1.begin() + i == it);
-            BOOST_TEST(s1.size() == h+1);
-            for ( size_t j = 0 ; j < i ; ++j )
-                BOOST_TEST(s1[j] == T(j));
-            BOOST_TEST(s1[i] == val);
-            for ( size_t j = 0 ; j < h-i ; ++j )
-                BOOST_TEST(s1[j+i+1] == T(j+i));
-        }
-    }
-    // insert(pos, n, val)
-    {
-        size_t n = size_t(h/1.5f);
-        for ( size_t i = 0 ; i <= h ; ++i )
-        {
-            static_vector<T, N> s1(s);
-            It it = s1.insert(s1.begin() + i, n, val);
-            BOOST_TEST(s1.begin() + i == it);
-            BOOST_TEST(s1.size() == h+n);
-            for ( size_t j = 0 ; j < i ; ++j )
-                BOOST_TEST(s1[j] == T(j));
-            for ( size_t j = 0 ; j < n ; ++j )
-                BOOST_TEST(s1[j+i] == val);
-            for ( size_t j = 0 ; j < h-i ; ++j )
-                BOOST_TEST(s1[j+i+n] == T(j+i));
-        }
-    }
-    // insert(pos, first, last)
-    test_insert<T, N>(s, ss);
-    test_insert<T, N>(s, v);
-    test_insert<T, N>(s, l);
-
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
-    stable_vector<T> bsv(ss.begin(), ss.end());
-    vector<T> bv(ss.begin(), ss.end());
-    test_insert<T, N>(s, bv);
-    test_insert<T, N>(s, bsv);
-#endif
+   static_vector<T, N> s, ss;
+   std::vector<T> v;
+   std::list<T> l;
+
+   typedef typename static_vector<T, N>::iterator It;
+
+   for ( size_t i = 0 ; i < h ; ++i )
+   {
+      s.push_back(T(i));
+      ss.push_back(T(100 + i));
+      v.push_back(T(100 + i));
+      l.push_back(T(100 + i));
+   }
+
+   // insert(pos, val)
+   {
+      for ( size_t i = 0 ; i <= h ; ++i )
+      {
+          static_vector<T, N> s1(s);
+          It it = s1.insert(s1.begin() + i, val);
+          BOOST_TEST(s1.begin() + i == it);
+          BOOST_TEST(s1.size() == h+1);
+          for ( size_t j = 0 ; j < i ; ++j )
+              BOOST_TEST(s1[j] == T(j));
+          BOOST_TEST(s1[i] == val);
+          for ( size_t j = 0 ; j < h-i ; ++j )
+              BOOST_TEST(s1[j+i+1] == T(j+i));
+      }
+   }
+   // insert(pos, n, val)
+   {
+      size_t n = size_t(h/1.5f);
+      for ( size_t i = 0 ; i <= h ; ++i )
+      {
+          static_vector<T, N> s1(s);
+          It it = s1.insert(s1.begin() + i, n, val);
+          BOOST_TEST(s1.begin() + i == it);
+          BOOST_TEST(s1.size() == h+n);
+          for ( size_t j = 0 ; j < i ; ++j )
+              BOOST_TEST(s1[j] == T(j));
+          for ( size_t j = 0 ; j < n ; ++j )
+              BOOST_TEST(s1[j+i] == val);
+          for ( size_t j = 0 ; j < h-i ; ++j )
+              BOOST_TEST(s1[j+i+n] == T(j+i));
+      }
+   }
+   // insert(pos, first, last)
+   test_insert<T, N>(s, ss);
+   test_insert<T, N>(s, v);
+   test_insert<T, N>(s, l);
+
+   stable_vector<T> bsv(ss.begin(), ss.end());
+   vector<T> bv(ss.begin(), ss.end());
+   test_insert<T, N>(s, bv);
+   test_insert<T, N>(s, bsv);
 }
 
 template <typename T>
 void test_capacity_0_nd()
 {
-    static_vector<T, 10> v(5u, T(0));
+   static_vector<T, 10> v(5u, T(0));
 
-    static_vector<T, 0 > s;
-    BOOST_TEST(s.size() == 0);
-    BOOST_TEST(s.capacity() == 0);
-#ifndef BOOST_NO_EXCEPTIONS
-    BOOST_TEST_THROW(s.at(0), std::out_of_range);
-    BOOST_TEST_THROW(s.resize(5u, T(0)), std::bad_alloc);
-    BOOST_TEST_THROW(s.push_back(T(0)), std::bad_alloc);
-    BOOST_TEST_THROW(s.insert(s.end(), T(0)), std::bad_alloc);
-    BOOST_TEST_THROW(s.insert(s.end(), 5u, T(0)), std::bad_alloc);
-    BOOST_TEST_THROW(s.insert(s.end(), v.begin(), v.end()), std::bad_alloc);
-    BOOST_TEST_THROW(s.assign(v.begin(), v.end()), std::bad_alloc);
-    BOOST_TEST_THROW(s.assign(5u, T(0)), std::bad_alloc);
-    try{
-        static_vector<T, 0> s2(v.begin(), v.end());
-        BOOST_TEST(false);
-    }catch(std::bad_alloc &){}
-    try{
-        static_vector<T, 0> s1(5u, T(0));
-        BOOST_TEST(false);
-    }catch(std::bad_alloc &){}
-#endif // BOOST_NO_EXCEPTIONS
+   static_vector<T, 0 > s;
+   BOOST_TEST(s.size() == 0);
+   BOOST_TEST(s.capacity() == 0);
+   BOOST_TEST_THROWS(s.at(0), std::out_of_range);
+   BOOST_TEST_THROWS(s.resize(5u, T(0)), std::bad_alloc);
+   BOOST_TEST_THROWS(s.push_back(T(0)), std::bad_alloc);
+   BOOST_TEST_THROWS(s.insert(s.end(), T(0)), std::bad_alloc);
+   BOOST_TEST_THROWS(s.insert(s.end(), 5u, T(0)), std::bad_alloc);
+   BOOST_TEST_THROWS(s.insert(s.end(), v.begin(), v.end()), std::bad_alloc);
+   BOOST_TEST_THROWS(s.assign(v.begin(), v.end()), std::bad_alloc);
+   BOOST_TEST_THROWS(s.assign(5u, T(0)), std::bad_alloc);
+   BOOST_TEST_THROWS(s.assign(5u, T(0)), std::bad_alloc);
+   typedef static_vector<T, 0> static_vector_0_t;
+   BOOST_TEST_THROWS(static_vector_0_t s2(v.begin(), v.end()), std::bad_alloc);
+   BOOST_TEST_THROWS(static_vector_0_t s1(5u, T(0)), std::bad_alloc);
 }
 
 template <typename T, size_t N>
 void test_exceptions_nd()
 {
-    static_vector<T, N> v(N, T(0));
-    static_vector<T, N/2> s(N/2, T(0));
+   static_vector<T, N> v(N, T(0));
+   static_vector<T, N/2> s(N/2, T(0));
 
-#ifndef BOOST_NO_EXCEPTIONS
-    BOOST_TEST_THROW(s.resize(N, T(0)), std::bad_alloc);
-    BOOST_TEST_THROW(s.push_back(T(0)), std::bad_alloc);
-    BOOST_TEST_THROW(s.insert(s.end(), T(0)), std::bad_alloc);
-    BOOST_TEST_THROW(s.insert(s.end(), N, T(0)), std::bad_alloc);
-    BOOST_TEST_THROW(s.insert(s.end(), v.begin(), v.end()), std::bad_alloc);
-    BOOST_TEST_THROW(s.assign(v.begin(), v.end()), std::bad_alloc);
-    BOOST_TEST_THROW(s.assign(N, T(0)), std::bad_alloc);
-    try{
-        static_vector<T, N/2> s2(v.begin(), v.end());
-        BOOST_TEST(false);
-    }catch(std::bad_alloc &){}
-    try{
-        static_vector<T, N/2> s1(N, T(0));
-        BOOST_TEST(false);
-    }catch(std::bad_alloc &){}
-#endif // BOOST_NO_EXCEPTIONS
+   BOOST_TEST_THROWS(s.resize(N, T(0)), std::bad_alloc);
+   BOOST_TEST_THROWS(s.push_back(T(0)), std::bad_alloc);
+   BOOST_TEST_THROWS(s.insert(s.end(), T(0)), std::bad_alloc);
+   BOOST_TEST_THROWS(s.insert(s.end(), N, T(0)), std::bad_alloc);
+   BOOST_TEST_THROWS(s.insert(s.end(), v.begin(), v.end()), std::bad_alloc);
+   BOOST_TEST_THROWS(s.assign(v.begin(), v.end()), std::bad_alloc);
+   BOOST_TEST_THROWS(s.assign(N, T(0)), std::bad_alloc);
+   typedef static_vector<T, N/2> static_vector_n_half_t;
+   BOOST_TEST_THROWS(static_vector_n_half_t s2(v.begin(), v.end()), std::bad_alloc);
+   BOOST_TEST_THROWS(static_vector_n_half_t s1(N, T(0)), std::bad_alloc);
 }
 
 template <typename T, size_t N>
 void test_swap_and_move_nd()
 {
-    {
-        static_vector<T, N> v1, v2, v3, v4;
-        static_vector<T, N> s1, s2;
-        static_vector<T, N> s4;
-
-        for (size_t i = 0 ; i < N ; ++i )
-        {
-            v1.push_back(T(i));
-            v2.push_back(T(i));
-            v3.push_back(T(i));
-            v4.push_back(T(i));
-        }
-        for (size_t i = 0 ; i < N/2 ; ++i )
-        {
-            s1.push_back(T(100 + i));
-            s2.push_back(T(100 + i));
-            s4.push_back(T(100 + i));
-        }
-
-        s1.swap(v1);
-        s2 = boost::move(v2);
-        static_vector<T, N> s3(boost::move(v3));
-        s4.swap(v4);
-
-        BOOST_TEST(v1.size() == N/2);
-        BOOST_TEST(s1.size() == N);
-        //iG moving does not imply emptying source
-        //BOOST_TEST(v2.size() == 0);
-        BOOST_TEST(s2.size() == N);
-        //iG moving does not imply emptying source
-        //BOOST_TEST(v3.size() == 0);
-        BOOST_TEST(s3.size() == N);
-        BOOST_TEST(v4.size() == N/2);
-        BOOST_TEST(s4.size() == N);
-        for (size_t i = 0 ; i < N/2 ; ++i )
-        {
-            BOOST_TEST(v1[i] == T(100 + i));
-            BOOST_TEST(v4[i] == T(100 + i));
-        }
-        for (size_t i = 0 ; i < N ; ++i )
-        {
-            BOOST_TEST(s1[i] == T(i));
-            BOOST_TEST(s2[i] == T(i));
-            BOOST_TEST(s3[i] == T(i));
-            BOOST_TEST(s4[i] == T(i));
-        }
-    }
-    {
-        static_vector<T, N> v1, v2, v3;
-        static_vector<T, N/2> s1, s2;
-
-        for (size_t i = 0 ; i < N/2 ; ++i )
-        {
-            v1.push_back(T(i));
-            v2.push_back(T(i));
-            v3.push_back(T(i));
-        }
-        for (size_t i = 0 ; i < N/3 ; ++i )
-        {
-            s1.push_back(T(100 + i));
-            s2.push_back(T(100 + i));
-        }
-
-        s1.swap(v1);
-        s2 = boost::move(v2);
-        static_vector<T, N/2> s3(boost::move(v3));
-
-        BOOST_TEST(v1.size() == N/3);
-        BOOST_TEST(s1.size() == N/2);
-        //iG moving does not imply emptying source
-        //BOOST_TEST(v2.size() == 0);
-        BOOST_TEST(s2.size() == N/2);
-        //iG moving does not imply emptying source
-        //BOOST_TEST(v3.size() == 0);
-        BOOST_TEST(s3.size() == N/2);
-        for (size_t i = 0 ; i < N/3 ; ++i )
-            BOOST_TEST(v1[i] == T(100 + i));
-        for (size_t i = 0 ; i < N/2 ; ++i )
-        {
-            BOOST_TEST(s1[i] == T(i));
-            BOOST_TEST(s2[i] == T(i));
-            BOOST_TEST(s3[i] == T(i));
-        }
-    }
-    {
-        static_vector<T, N> v(N, T(0));
-        static_vector<T, N/2> s(N/2, T(1));
-#ifndef BOOST_NO_EXCEPTIONS
-        BOOST_TEST_THROW(s.swap(v), std::bad_alloc);
-        v.resize(N, T(0));
-        BOOST_TEST_THROW(s = boost::move(v), std::bad_alloc);
-        v.resize(N, T(0));
-        try {
-            static_vector<T, N/2> s2(boost::move(v));
-            BOOST_TEST(false);
-        } catch (std::bad_alloc &) {}
-#endif // BOOST_NO_EXCEPTIONS
-    }
+   {
+      static_vector<T, N> v1, v2, v3, v4;
+      static_vector<T, N> s1, s2;
+      static_vector<T, N> s4;
+
+      for (size_t i = 0 ; i < N ; ++i )
+      {
+          v1.push_back(T(i));
+          v2.push_back(T(i));
+          v3.push_back(T(i));
+          v4.push_back(T(i));
+      }
+      for (size_t i = 0 ; i < N/2 ; ++i )
+      {
+          s1.push_back(T(100 + i));
+          s2.push_back(T(100 + i));
+          s4.push_back(T(100 + i));
+      }
+
+      s1.swap(v1);
+      s2 = boost::move(v2);
+      static_vector<T, N> s3(boost::move(v3));
+      s4.swap(v4);
+
+      BOOST_TEST(v1.size() == N/2);
+      BOOST_TEST(s1.size() == N);
+      //iG moving does not imply emptying source
+      //BOOST_TEST(v2.size() == 0);
+      BOOST_TEST(s2.size() == N);
+      //iG moving does not imply emptying source
+      //BOOST_TEST(v3.size() == 0);
+      BOOST_TEST(s3.size() == N);
+      BOOST_TEST(v4.size() == N/2);
+      BOOST_TEST(s4.size() == N);
+      for (size_t i = 0 ; i < N/2 ; ++i )
+      {
+          BOOST_TEST(v1[i] == T(100 + i));
+          BOOST_TEST(v4[i] == T(100 + i));
+      }
+      for (size_t i = 0 ; i < N ; ++i )
+      {
+          BOOST_TEST(s1[i] == T(i));
+          BOOST_TEST(s2[i] == T(i));
+          BOOST_TEST(s3[i] == T(i));
+          BOOST_TEST(s4[i] == T(i));
+      }
+   }
+   {
+      static_vector<T, N> v1, v2, v3;
+      static_vector<T, N/2> s1, s2;
+
+      for (size_t i = 0 ; i < N/2 ; ++i )
+      {
+          v1.push_back(T(i));
+          v2.push_back(T(i));
+          v3.push_back(T(i));
+      }
+      for (size_t i = 0 ; i < N/3 ; ++i )
+      {
+          s1.push_back(T(100 + i));
+          s2.push_back(T(100 + i));
+      }
+
+      s1.swap(v1);
+      s2 = boost::move(v2);
+      static_vector<T, N/2> s3(boost::move(v3));
+
+      BOOST_TEST(v1.size() == N/3);
+      BOOST_TEST(s1.size() == N/2);
+      //iG moving does not imply emptying source
+      //BOOST_TEST(v2.size() == 0);
+      BOOST_TEST(s2.size() == N/2);
+      //iG moving does not imply emptying source
+      //BOOST_TEST(v3.size() == 0);
+      BOOST_TEST(s3.size() == N/2);
+      for (size_t i = 0 ; i < N/3 ; ++i )
+          BOOST_TEST(v1[i] == T(100 + i));
+      for (size_t i = 0 ; i < N/2 ; ++i )
+      {
+          BOOST_TEST(s1[i] == T(i));
+          BOOST_TEST(s2[i] == T(i));
+          BOOST_TEST(s3[i] == T(i));
+      }
+   }
+   {
+      typedef static_vector<T, N/2> small_vector_t;
+      static_vector<T, N> v(N, T(0));
+      small_vector_t s(N/2, T(1));
+      BOOST_TEST_THROWS(s.swap(v), std::bad_alloc);
+      v.resize(N, T(0));
+      BOOST_TEST_THROWS(s = boost::move(v), std::bad_alloc);
+      v.resize(N, T(0));
+      BOOST_TEST_THROWS(small_vector_t s2(boost::move(v)), std::bad_alloc);
+   }
 }
 
 template <typename T, size_t N>
 void test_emplace_0p()
 {
-    //emplace_back()
-    {
-        static_vector<T, N> v;
-
-        for (int i = 0 ; i < int(N) ; ++i )
-            v.emplace_back();
-        BOOST_TEST(v.size() == N);
-#ifndef BOOST_NO_EXCEPTIONS
-        BOOST_TEST_THROW(v.emplace_back(), std::bad_alloc);
-#endif
-    }
+   //emplace_back()
+   {
+      static_vector<T, N> v;
+
+      for (int i = 0 ; i < int(N) ; ++i )
+          v.emplace_back();
+      BOOST_TEST(v.size() == N);
+      BOOST_TEST_THROWS(v.emplace_back(), std::bad_alloc);
+   }
 }
 
 template <typename T, size_t N>
 void test_emplace_2p()
 {
-    //emplace_back(pos, int, int)
-    {
-        static_vector<T, N> v;
-
-        for (int i = 0 ; i < int(N) ; ++i )
-            v.emplace_back(i, 100 + i);
-        BOOST_TEST(v.size() == N);
-#ifndef BOOST_NO_EXCEPTIONS
-        BOOST_TEST_THROW(v.emplace_back(N, 100 + N), std::bad_alloc);
-#endif
-        BOOST_TEST(v.size() == N);
-        for (int i = 0 ; i < int(N) ; ++i )
-            BOOST_TEST(v[i] == T(i, 100 + i));
-    }
-
-    // emplace(pos, int, int)
-    {
-        typedef typename static_vector<T, N>::iterator It;
-
-        int h = N / 2;
-
-        static_vector<T, N> v;
-        for ( int i = 0 ; i < h ; ++i )
-            v.emplace_back(i, 100 + i);
-
-        for ( int i = 0 ; i <= h ; ++i )
-        {
-            static_vector<T, N> vv(v);
-            It it = vv.emplace(vv.begin() + i, i+100, i+200);
-            BOOST_TEST(vv.begin() + i == it);
-            BOOST_TEST(vv.size() == size_t(h+1));
-            for ( int j = 0 ; j < i ; ++j )
-                BOOST_TEST(vv[j] == T(j, j+100));
-            BOOST_TEST(vv[i] == T(i+100, i+200));
-            for ( int j = 0 ; j < h-i ; ++j )
-                BOOST_TEST(vv[j+i+1] == T(j+i, j+i+100));
-        }
-    }
+   //emplace_back(pos, int, int)
+   {
+      static_vector<T, N> v;
+
+      for (int i = 0 ; i < int(N) ; ++i )
+          v.emplace_back(i, 100 + i);
+      BOOST_TEST(v.size() == N);
+      BOOST_TEST_THROWS(v.emplace_back(N, 100 + N), std::bad_alloc);
+      BOOST_TEST(v.size() == N);
+      for (int i = 0 ; i < int(N) ; ++i )
+          BOOST_TEST(v[i] == T(i, 100 + i));
+   }
+
+   // emplace(pos, int, int)
+   {
+      typedef typename static_vector<T, N>::iterator It;
+
+      int h = N / 2;
+
+      static_vector<T, N> v;
+      for ( int i = 0 ; i < h ; ++i )
+          v.emplace_back(i, 100 + i);
+
+      for ( int i = 0 ; i <= h ; ++i )
+      {
+          static_vector<T, N> vv(v);
+          It it = vv.emplace(vv.begin() + i, i+100, i+200);
+          BOOST_TEST(vv.begin() + i == it);
+          BOOST_TEST(vv.size() == size_t(h+1));
+          for ( int j = 0 ; j < i ; ++j )
+              BOOST_TEST(vv[j] == T(j, j+100));
+          BOOST_TEST(vv[i] == T(i+100, i+200));
+          for ( int j = 0 ; j < h-i ; ++j )
+              BOOST_TEST(vv[j+i+1] == T(j+i, j+i+100));
+      }
+   }
 }
 
 template <typename T, size_t N>
 void test_sv_elem(T const& t)
 {
-    typedef static_vector<T, N> V;
+   typedef static_vector<T, N> V;
 
-    static_vector<V, N> v;
+   static_vector<V, N> v;
 
-    v.push_back(V(N/2, t));
-    V vvv(N/2, t);
-    v.push_back(boost::move(vvv));
-    v.insert(v.begin(), V(N/2, t));
-    v.insert(v.end(), V(N/2, t));
-    v.emplace_back(N/2, t);
+   v.push_back(V(N/2, t));
+   V vvv(N/2, t);
+   v.push_back(boost::move(vvv));
+   v.insert(v.begin(), V(N/2, t));
+   v.insert(v.end(), V(N/2, t));
+   v.emplace_back(N/2, t);
 }
 
 int main(int, char* [])
 {
-    BOOST_TEST(counting_value::count() == 0);
-
-    test_ctor_ndc<int, 10>();
-    test_ctor_ndc<value_ndc, 10>();
-    test_ctor_ndc<counting_value, 10>();
-    BOOST_TEST(counting_value::count() == 0);
-    test_ctor_ndc<shptr_value, 10>();
-    test_ctor_ndc<copy_movable, 10>();
-
-    test_ctor_nc<int, 10>(5);
-    test_ctor_nc<value_nc, 10>(5);
-    test_ctor_nc<counting_value, 10>(5);
-    BOOST_TEST(counting_value::count() == 0);
-    test_ctor_nc<shptr_value, 10>(5);
-    test_ctor_nc<copy_movable, 10>(5);
-
-    test_ctor_nd<int, 10>(5, 1);
-    test_ctor_nd<value_nd, 10>(5, value_nd(1));
-    test_ctor_nd<counting_value, 10>(5, counting_value(1));
-    BOOST_TEST(counting_value::count() == 0);
-    test_ctor_nd<shptr_value, 10>(5, shptr_value(1));
-    test_ctor_nd<copy_movable, 10>(5, produce());
-
-    test_resize_nc<int, 10>(5);
-    test_resize_nc<value_nc, 10>(5);
-    test_resize_nc<counting_value, 10>(5);
-    BOOST_TEST(counting_value::count() == 0);
-    test_resize_nc<shptr_value, 10>(5);
-    test_resize_nc<copy_movable, 10>(5);
-
-    test_resize_nd<int, 10>(5, 1);
-    test_resize_nd<value_nd, 10>(5, value_nd(1));
-    test_resize_nd<counting_value, 10>(5, counting_value(1));
-    BOOST_TEST(counting_value::count() == 0);
-    test_resize_nd<shptr_value, 10>(5, shptr_value(1));
-    test_resize_nd<copy_movable, 10>(5, produce());
-
-    test_push_back_nd<int, 10>();
-    test_push_back_nd<value_nd, 10>();
-    test_push_back_nd<counting_value, 10>();
-    BOOST_TEST(counting_value::count() == 0);
-    test_push_back_nd<shptr_value, 10>();
-    test_push_back_nd<copy_movable, 10>();
-
-    test_pop_back_nd<int, 10>();
-    test_pop_back_nd<value_nd, 10>();
-    test_pop_back_nd<counting_value, 10>();
-    BOOST_TEST(counting_value::count() == 0);
-    test_pop_back_nd<shptr_value, 10>();
-    test_pop_back_nd<copy_movable, 10>();
-
-    test_copy_and_assign_nd<int, 10>(1);
-    test_copy_and_assign_nd<value_nd, 10>(value_nd(1));
-    test_copy_and_assign_nd<counting_value, 10>(counting_value(1));
-    BOOST_TEST(counting_value::count() == 0);
-    test_copy_and_assign_nd<shptr_value, 10>(shptr_value(1));
-    test_copy_and_assign_nd<copy_movable, 10>(produce());
-
-    test_iterators_nd<int, 10>();
-    test_iterators_nd<value_nd, 10>();
-    test_iterators_nd<counting_value, 10>();
-    BOOST_TEST(counting_value::count() == 0);
-    test_iterators_nd<shptr_value, 10>();
-    test_iterators_nd<copy_movable, 10>();
-
-    test_erase_nd<int, 10>();
-    test_erase_nd<value_nd, 10>();
-    test_erase_nd<counting_value, 10>();
-    BOOST_TEST(counting_value::count() == 0);
-    test_erase_nd<shptr_value, 10>();
-    test_erase_nd<copy_movable, 10>();
-
-    test_insert_nd<int, 10>(50);
-    test_insert_nd<value_nd, 10>(value_nd(50));
-    test_insert_nd<counting_value, 10>(counting_value(50));
-    BOOST_TEST(counting_value::count() == 0);
-    test_insert_nd<shptr_value, 10>(shptr_value(50));
-    test_insert_nd<copy_movable, 10>(produce());
-
-    test_capacity_0_nd<int>();
-    test_capacity_0_nd<value_nd>();
-    test_capacity_0_nd<counting_value>();
-    BOOST_TEST(counting_value::count() == 0);
-    test_capacity_0_nd<shptr_value>();
-    test_capacity_0_nd<copy_movable>();
-
-    test_exceptions_nd<int, 10>();
-    test_exceptions_nd<value_nd, 10>();
-    test_exceptions_nd<counting_value, 10>();
-    BOOST_TEST(counting_value::count() == 0);
-    test_exceptions_nd<shptr_value, 10>();
-    test_exceptions_nd<copy_movable, 10>();
-
-    test_swap_and_move_nd<int, 10>();
-    test_swap_and_move_nd<value_nd, 10>();
-    test_swap_and_move_nd<counting_value, 10>();
-    BOOST_TEST(counting_value::count() == 0);
-    test_swap_and_move_nd<shptr_value, 10>();
-    test_swap_and_move_nd<copy_movable, 10>();
-
-    test_emplace_0p<counting_value, 10>();
-    BOOST_TEST(counting_value::count() == 0);
-
-    test_emplace_2p<counting_value, 10>();
-    BOOST_TEST(counting_value::count() == 0);
-
-    test_sv_elem<int, 10>(50);
-    test_sv_elem<value_nd, 10>(value_nd(50));
-    test_sv_elem<counting_value, 10>(counting_value(50));
-    BOOST_TEST(counting_value::count() == 0);
-    test_sv_elem<shptr_value, 10>(shptr_value(50));
-    test_sv_elem<copy_movable, 10>(copy_movable(50));
-
-    return boost::report_errors();
+   using boost::container::test::movable_and_copyable_int;
+   using boost::container::test::produce_movable_and_copyable_int;
+   BOOST_TEST(counting_value::count() == 0);
+
+   test_ctor_ndc<int, 10>();
+   test_ctor_ndc<value_ndc, 10>();
+   test_ctor_ndc<counting_value, 10>();
+   BOOST_TEST(counting_value::count() == 0);
+   test_ctor_ndc<shptr_value, 10>();
+   test_ctor_ndc<movable_and_copyable_int, 10>();
+
+   test_ctor_nc<int, 10>(5);
+   test_ctor_nc<value_nc, 10>(5);
+   test_ctor_nc<counting_value, 10>(5);
+   BOOST_TEST(counting_value::count() == 0);
+   test_ctor_nc<shptr_value, 10>(5);
+   test_ctor_nc<movable_and_copyable_int, 10>(5);
+
+   test_ctor_nd<int, 10>(5, 1);
+   test_ctor_nd<value_nd, 10>(5, value_nd(1));
+   test_ctor_nd<counting_value, 10>(5, counting_value(1));
+   BOOST_TEST(counting_value::count() == 0);
+   test_ctor_nd<shptr_value, 10>(5, shptr_value(1));
+   test_ctor_nd<movable_and_copyable_int, 10>(5, produce_movable_and_copyable_int());
+
+   test_resize_nc<int, 10>(5);
+   test_resize_nc<value_nc, 10>(5);
+   test_resize_nc<counting_value, 10>(5);
+   BOOST_TEST(counting_value::count() == 0);
+   test_resize_nc<shptr_value, 10>(5);
+   test_resize_nc<movable_and_copyable_int, 10>(5);
+
+   test_resize_nd<int, 10>(5, 1);
+   test_resize_nd<value_nd, 10>(5, value_nd(1));
+   test_resize_nd<counting_value, 10>(5, counting_value(1));
+   BOOST_TEST(counting_value::count() == 0);
+   test_resize_nd<shptr_value, 10>(5, shptr_value(1));
+   test_resize_nd<movable_and_copyable_int, 10>(5, produce_movable_and_copyable_int());
+
+   test_push_back_nd<int, 10>();
+   test_push_back_nd<value_nd, 10>();
+   test_push_back_nd<counting_value, 10>();
+   BOOST_TEST(counting_value::count() == 0);
+   test_push_back_nd<shptr_value, 10>();
+   test_push_back_nd<movable_and_copyable_int, 10>();
+
+   test_pop_back_nd<int, 10>();
+   test_pop_back_nd<value_nd, 10>();
+   test_pop_back_nd<counting_value, 10>();
+   BOOST_TEST(counting_value::count() == 0);
+   test_pop_back_nd<shptr_value, 10>();
+   test_pop_back_nd<movable_and_copyable_int, 10>();
+
+   test_copy_and_assign_nd<int, 10>(1);
+   test_copy_and_assign_nd<value_nd, 10>(value_nd(1));
+   test_copy_and_assign_nd<counting_value, 10>(counting_value(1));
+   BOOST_TEST(counting_value::count() == 0);
+   test_copy_and_assign_nd<shptr_value, 10>(shptr_value(1));
+   test_copy_and_assign_nd<movable_and_copyable_int, 10>(produce_movable_and_copyable_int());
+
+   test_iterators_nd<int, 10>();
+   test_iterators_nd<value_nd, 10>();
+   test_iterators_nd<counting_value, 10>();
+   BOOST_TEST(counting_value::count() == 0);
+   test_iterators_nd<shptr_value, 10>();
+   test_iterators_nd<movable_and_copyable_int, 10>();
+
+   test_erase_nd<int, 10>();
+   test_erase_nd<value_nd, 10>();
+   test_erase_nd<counting_value, 10>();
+   BOOST_TEST(counting_value::count() == 0);
+   test_erase_nd<shptr_value, 10>();
+   test_erase_nd<movable_and_copyable_int, 10>();
+
+   test_insert_nd<int, 10>(50);
+   test_insert_nd<value_nd, 10>(value_nd(50));
+   test_insert_nd<counting_value, 10>(counting_value(50));
+   BOOST_TEST(counting_value::count() == 0);
+   test_insert_nd<shptr_value, 10>(shptr_value(50));
+   test_insert_nd<movable_and_copyable_int, 10>(produce_movable_and_copyable_int());
+
+   test_capacity_0_nd<int>();
+   test_capacity_0_nd<value_nd>();
+   test_capacity_0_nd<counting_value>();
+   BOOST_TEST(counting_value::count() == 0);
+   test_capacity_0_nd<shptr_value>();
+   test_capacity_0_nd<movable_and_copyable_int>();
+
+   test_exceptions_nd<int, 10>();
+   test_exceptions_nd<value_nd, 10>();
+   test_exceptions_nd<counting_value, 10>();
+   BOOST_TEST(counting_value::count() == 0);
+   test_exceptions_nd<shptr_value, 10>();
+   test_exceptions_nd<movable_and_copyable_int, 10>();
+
+   test_swap_and_move_nd<int, 10>();
+   test_swap_and_move_nd<value_nd, 10>();
+   test_swap_and_move_nd<counting_value, 10>();
+   BOOST_TEST(counting_value::count() == 0);
+   test_swap_and_move_nd<shptr_value, 10>();
+   test_swap_and_move_nd<movable_and_copyable_int, 10>();
+
+   test_emplace_0p<counting_value, 10>();
+   BOOST_TEST(counting_value::count() == 0);
+
+   test_emplace_2p<counting_value, 10>();
+   BOOST_TEST(counting_value::count() == 0);
+
+   test_sv_elem<int, 10>(50);
+   test_sv_elem<value_nd, 10>(value_nd(50));
+   test_sv_elem<counting_value, 10>(counting_value(50));
+   BOOST_TEST(counting_value::count() == 0);
+   test_sv_elem<shptr_value, 10>(shptr_value(50));
+   test_sv_elem<movable_and_copyable_int, 10>(movable_and_copyable_int(50));
+   return boost::report_errors();
 }
 
 #include <boost/container/detail/config_end.hpp>
Copied: branches/release/libs/container/test/static_vector_test.hpp (from r83049, /trunk/libs/container/test/static_vector_test.hpp)
==============================================================================
--- /trunk/libs/container/test/static_vector_test.hpp	(original)
+++ branches/release/libs/container/test/static_vector_test.hpp	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -14,7 +14,7 @@
 #include <boost/container/static_vector.hpp>
 
 #include <boost/shared_ptr.hpp>
-#include "movable.hpp"
+#include "movable_int.hpp"
 
 using namespace boost::container;
 
Modified: branches/release/libs/container/test/vector_test.cpp
==============================================================================
--- branches/release/libs/container/test/vector_test.cpp	(original)
+++ branches/release/libs/container/test/vector_test.cpp	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -39,6 +39,17 @@
 template class boost::container::vector<test::movable_and_copyable_int,
    std::allocator<test::movable_and_copyable_int> >;
 
+namespace container_detail {
+
+#ifndef BOOST_CONTAINER_VECTOR_ITERATOR_IS_POINTER
+
+template class vector_const_iterator<int*>;
+template class vector_iterator<int*>;
+
+#endif   //BOOST_CONTAINER_VECTOR_ITERATOR_IS_POINTER
+
+}
+
 }}
 
 int test_expand_bwd()
Modified: branches/release/libs/container/test/vector_test.hpp
==============================================================================
--- branches/release/libs/container/test/vector_test.hpp	(original)
+++ branches/release/libs/container/test/vector_test.hpp	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -30,6 +30,8 @@
 #include "input_from_forward_iterator.hpp"
 #include <boost/move/utility.hpp>
 #include <boost/move/iterator.hpp>
+#include <boost/detail/no_exceptions_support.hpp>
+#include "insert_test.hpp"
 
 namespace boost{
 namespace container {
@@ -79,6 +81,17 @@
       stdvector->push_back(int(3));
       if(!test::CheckEqualContainers(boostvector, stdvector)) return false;
    }
+   {
+      V1 *pv1 = new V1(*boostvector);
+      V2 *pv2 = new V2(*stdvector);
+      boostvector->clear();
+      stdvector->clear();
+      boostvector->assign(pv1->begin(), pv1->end());
+      stdvector->assign(pv2->begin(), pv2->end());
+      if(!test::CheckEqualContainers(boostvector, stdvector)) return 1;
+      delete pv1;
+      delete pv2;
+   }
 
    return true;
 }
@@ -90,8 +103,12 @@
    typedef typename MyBoostVector::value_type     IntType;
    const int max = 100;
 
+   if(!test_range_insertion<MyBoostVector>()){
+      return 1;
+   }
+
    {
-      try{
+      BOOST_TRY{
          MyBoostVector *boostvector = new MyBoostVector;
          MyStdVector *stdvector = new MyStdVector;
          boostvector->resize(100);
@@ -160,38 +177,38 @@
 
             IntType aux_vect[50];
             for(int i = 0; i < 50; ++i){
-               IntType new_int(-2);
+               IntType new_int(-i);
                aux_vect[i] = boost::move(new_int);
             }
             int aux_vect2[50];
             for(int i = 0; i < 50; ++i){
-               aux_vect2[i] = -2;
+               aux_vect2[i] = -i;
             }
             typename MyBoostVector::size_type old_size = boostvector->size();
             typename MyBoostVector::iterator insert_it =
-               boostvector->insert(boostvector->begin() + old_size
+               boostvector->insert(boostvector->begin() + old_size/2
                               ,boost::make_move_iterator(&aux_vect[0])
                               ,boost::make_move_iterator(aux_vect + 50));
-            if(boostvector->begin() + old_size != insert_it) return 1;
-            stdvector->insert(stdvector->begin() + old_size, aux_vect2, aux_vect2 + 50);
+            if(boostvector->begin() + old_size/2 != insert_it) return 1;
+            stdvector->insert(stdvector->begin() + old_size/2, aux_vect2, aux_vect2 + 50);
             if(!test::CheckEqualContainers(boostvector, stdvector)) return 1;
 
             for(int i = 0; i < 50; ++i){
-               IntType new_int(-3);
+               IntType new_int(-i);
                aux_vect[i] = boost::move(new_int);
             }
 
             for(int i = 0; i < 50; ++i){
-               aux_vect2[i] = -3;
+               aux_vect2[i] = -i;
             }
             old_size = boostvector->size();
             //Now try with input iterators instead
-            insert_it = boostvector->insert(boostvector->begin() + old_size
+            insert_it = boostvector->insert(boostvector->begin() + old_size/2
                               ,boost::make_move_iterator(make_input_from_forward_iterator(&aux_vect[0]))
                               ,boost::make_move_iterator(make_input_from_forward_iterator(aux_vect + 50))
                            );
-            if(boostvector->begin() + old_size != insert_it) return 1;
-            stdvector->insert(stdvector->begin() + old_size, aux_vect2, aux_vect2 + 50);
+            if(boostvector->begin() + old_size/2 != insert_it) return 1;
+            stdvector->insert(stdvector->begin() + old_size/2, aux_vect2, aux_vect2 + 50);
             if(!test::CheckEqualContainers(boostvector, stdvector)) return 1;
          }
 /*       //deque has no reserve
@@ -215,7 +232,12 @@
          stdvector->push_back(int(1));
          if(!test::CheckEqualContainers(boostvector, stdvector)) return 1;
          }
-         {  //push_back with enough capacity
+
+         {  //test back()
+         const IntType test_this(1);
+         if(test_this != boostvector->back())   return 1;
+         }
+         {  //pop_back with enough capacity
          boostvector->pop_back();
          boostvector->pop_back();
          stdvector->pop_back();
@@ -292,11 +314,15 @@
          delete stdvector;
          delete boostvector;
       }
-      catch(std::exception &ex){
+      BOOST_CATCH(std::exception &ex){
+         #ifndef BOOST_NO_EXCEPTIONS
          std::cout << ex.what() << std::endl;
+         #endif
          return 1;
       }
+      BOOST_CATCH_END
    }
+
    std::cout << std::endl << "Test OK!" << std::endl;
    return 0;
 }
@@ -308,4 +334,3 @@
 #include <boost/container/detail/config_end.hpp>
 
 #endif //BOOST_CONTAINER_TEST_VECTOR_TEST_HEADER
-
Modified: branches/release/libs/interprocess/doc/Jamfile.v2
==============================================================================
--- branches/release/libs/interprocess/doc/Jamfile.v2	(original)
+++ branches/release/libs/interprocess/doc/Jamfile.v2	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -36,8 +36,8 @@
                                    \"BOOST_CONTAINER_NOEXCEPT=\" \\
                                    \"BOOST_INTERPROCESS_ENABLE_MOVE_EMULATION(a)= \" \\
                                    \"BOOST_RV_REF(a)=a &&\" \\
-                                   \"BOOST_RV_REF_2_TEMPL_ARGS(a,b,c)=a &&\" \\
-                                   \"BOOST_RV_REF_3_TEMPL_ARGS(a,b,c,d)=a &&\" \\
+                                   \"BOOST_RV_REF_BEG=\" \\
+                                   \"BOOST_RV_REF_END=&&\" \\
                                    \"BOOST_FWD_REF(a)=a &&\""
 
         <xsl:param>"boost.doxygen.reftitle=Boost.Interprocess Reference"
@@ -54,25 +54,23 @@
    :
         <format>html:<xsl:param>boost.root=../../../..
         <format>html:<xsl:param>boost.libraries=../../../../libs/libraries.htm
-        <xsl:param>toc.max.depth=1
-        <xsl:param>toc.section.depth=2
+        <xsl:param>generate.section.toc.level=3
         <xsl:param>chunk.first.sections=1
-        <xsl:param>chunk.section.depth=2
         <dependency>autodoc
         <format>pdf:<xsl:param>boost.url.prefix=http://www.boost.org/doc/libs/release/doc/html
         # Build requirements go here:
-       
+
         # <auto-index>on (or off) one turns on (or off) indexing:
         <auto-index>on
-       
+
         # Turns on (or off) auto-index-verbose for diagnostic info.
         # This is highly recommended until you have got all the many details correct!
         <auto-index-verbose>on
-       
+
         # Choose the indexing method (separately for html and PDF) - see manual.
         # Choose indexing method for PDFs:
         <format>pdf:<auto-index-internal>off
-       
+
         # Choose indexing method for html:
         <format>html:<auto-index-internal>on
         <format>docbook:<auto-index-internal>on
Modified: branches/release/libs/interprocess/doc/interprocess.qbk
==============================================================================
--- branches/release/libs/interprocess/doc/interprocess.qbk	(original)
+++ branches/release/libs/interprocess/doc/interprocess.qbk	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -4751,6 +4751,7 @@
 [doc_cached_node_allocator]
 
 [endsect]
+
 [endsect]
 
 [section:stl_allocators_adaptive Adaptive pool node allocators]
@@ -6002,6 +6003,7 @@
 * [classref boost::interprocess::basic_managed_external_buffer basic_managed_external_buffer] (for user provided external buffer).
 
 [endsect]
+
 [endsect]
 
 [section:allocators_containers Allocators and containers]
@@ -6711,6 +6713,18 @@
 
 [section:release_notes Release Notes]
 
+[section:release_notes_boost_1_54_00 Boost 1.54 Release]
+
+*  Added support for platform-specific flags to mapped_region (ticket #8030)
+*  Fixed bugs [@https://svn.boost.org/trac/boost/ticket/7484 #7484],
+              [@https://svn.boost.org/trac/boost/ticket/7598 #7598],
+              [@https://svn.boost.org/trac/boost/ticket/7682 #7682],
+              [@https://svn.boost.org/trac/boost/ticket/7923 #7923],
+              [@https://svn.boost.org/trac/boost/ticket/7924 #7924],
+              [@https://svn.boost.org/trac/boost/ticket/7928 #7928].
+
+[endsect]
+
 [section:release_notes_boost_1_53_00 Boost 1.53 Release]
 
 *  Fixed GCC -Wshadow warnings.
@@ -6828,9 +6842,10 @@
 [section:release_notes_boost_1_46_00 Boost 1.46 Release]
 
 *  Fixed bugs
+  [@https://svn.boost.org/trac/boost/ticket/4557 #4557],
   [@https://svn.boost.org/trac/boost/ticket/4979 #4979],
   [@https://svn.boost.org/trac/boost/ticket/4907 #4907],
-  [@https://svn.boost.org/trac/boost/ticket/4895 #4895]
+  [@https://svn.boost.org/trac/boost/ticket/4895 #4895].
 
 [endsect]
 
@@ -7235,6 +7250,8 @@
 
 [include auto_index_helpers.qbk]
 
+[section:indexes_reference Indexes and Reference]
+
 [section:index Indexes]
 
 [named_index class_name Class Index]
@@ -7246,3 +7263,5 @@
 [endsect]
 
 [xinclude autodoc.xml]
+
+[endsect]
Modified: branches/release/libs/interprocess/proj/vc7ide/interprocesslib.vcproj
==============================================================================
--- branches/release/libs/interprocess/proj/vc7ide/interprocesslib.vcproj	(original)
+++ branches/release/libs/interprocess/proj/vc7ide/interprocesslib.vcproj	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -527,9 +527,6 @@
                                 RelativePath="..\..\..\..\boost\interprocess\detail\managed_open_or_create_impl.hpp">
                         </File>
                         <File
-				RelativePath="..\..\..\..\boost\interprocess\detail\math_functions.hpp">
-			</File>
-			<File
                                 RelativePath="..\..\..\..\boost\interprocess\detail\min_max.hpp">
                         </File>
                         <File
Modified: branches/release/libs/intrusive/doc/intrusive.qbk
==============================================================================
--- branches/release/libs/intrusive/doc/intrusive.qbk	(original)
+++ branches/release/libs/intrusive/doc/intrusive.qbk	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -3040,6 +3040,7 @@
 /
 /[endsect]
 /]
+
 [endsect]
 
 [section:value_traits Containers with custom ValueTraits]
@@ -3845,6 +3846,12 @@
 
 [section:release_notes Release Notes]
 
+[section:release_notes_boost_1_54_00 Boost 1.54 Release]
+
+*  Added `BOOST_NO_EXCEPTIONS` support (bug [@https://svn.boost.org/trac/boost/ticket/7849 #7849]).
+
+[endsect]
+
 [section:release_notes_boost_1_53_00 Boost 1.53 Release]
 
 *  Fixed bugs
@@ -4050,4 +4057,4 @@
 
 [endsect]
 
-[xinclude autodoc.xml]
\ No newline at end of file
+[xinclude autodoc.xml]
Modified: branches/release/libs/intrusive/example/Jamfile.v2
==============================================================================
--- branches/release/libs/intrusive/example/Jamfile.v2	(original)
+++ branches/release/libs/intrusive/example/Jamfile.v2	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -21,7 +21,7 @@
 
    for local fileb in [ glob *.cpp ]
    {
-      all_rules += [ run $(fileb) /boost/thread//boost_thread
+      all_rules += [ run $(fileb)
       :  # additional args
       :  # test-files
       :  # requirements
Modified: branches/release/libs/intrusive/example/doc_any_hook.cpp
==============================================================================
--- branches/release/libs/intrusive/example/doc_any_hook.cpp	(original)
+++ branches/release/libs/intrusive/example/doc_any_hook.cpp	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -50,8 +50,8 @@
       base_slist.push_front(*it), member_list.push_back(*it);
 
    //Now test lists
-   BaseSList::iterator bit(base_slist.begin()), bitend(base_slist.end());
-   MemberList::reverse_iterator mrit(member_list.rbegin()), mritend(member_list.rend());
+   BaseSList::iterator bit(base_slist.begin());
+   MemberList::reverse_iterator mrit(member_list.rbegin());
    std::vector<MyClass>::reverse_iterator rit(values.rbegin()), ritend(values.rend());
 
    //Test the objects inserted in the base hook list
Modified: branches/release/libs/intrusive/example/doc_avl_set.cpp
==============================================================================
--- branches/release/libs/intrusive/example/doc_avl_set.cpp	(original)
+++ branches/release/libs/intrusive/example/doc_avl_set.cpp	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -69,8 +69,8 @@
 
    //Now test avl_sets
    {
-      BaseSet::reverse_iterator rbit(baseset.rbegin()), rbitend(baseset.rend());
-      MemberMultiset::iterator mit(membermultiset.begin()), mitend(membermultiset.end());
+      BaseSet::reverse_iterator rbit(baseset.rbegin());
+      MemberMultiset::iterator mit(membermultiset.begin());
       VectIt it(values.begin()), itend(values.end());
 
       //Test the objects inserted in the base hook avl_set
Modified: branches/release/libs/intrusive/example/doc_erasing_and_disposing.cpp
==============================================================================
--- branches/release/libs/intrusive/example/doc_erasing_and_disposing.cpp	(original)
+++ branches/release/libs/intrusive/example/doc_erasing_and_disposing.cpp	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -9,6 +9,7 @@
 // See http://www.boost.org/libs/intrusive for documentation.
 //
 /////////////////////////////////////////////////////////////////////////////
+#include <boost/detail/no_exceptions_support.hpp>
 //[doc_erasing_and_disposing
 #include <boost/intrusive/list.hpp>
 
@@ -50,18 +51,45 @@
    //Fill all the nodes and insert them in the list
    my_class_list list;
 
+   //<-
+   #if 1
+   BOOST_TRY{
+   #else
+   //->
    try{
+   //<-
+   #endif
+   //->
       //Insert new objects in the container
       for(int i = 0; i < MaxElem; ++i) list.push_back(*new my_class(i));
 
       //Now use remove_and_dispose_if to erase and delete the objects
       list.remove_and_dispose_if(is_even(), delete_disposer());
    }
+   //<-
+   #if 1
+   BOOST_CATCH(...){
+   #else
+   //->
    catch(...){
+   //<-
+   #endif
+   //->
       //If something throws, make sure that all the memory is freed
       list.clear_and_dispose(delete_disposer());
+      //<-
+      #if 1
+      BOOST_RETHROW
+      #else
+      //->
       throw;
+      //<-
+      #endif
+      //->
    }
+   //<-
+   BOOST_CATCH_END
+   //->
 
    //Dispose remaining elements
    list.erase_and_dispose(list.begin(), list.end(), delete_disposer());
Modified: branches/release/libs/intrusive/example/doc_how_to_use.cpp
==============================================================================
--- branches/release/libs/intrusive/example/doc_how_to_use.cpp	(original)
+++ branches/release/libs/intrusive/example/doc_how_to_use.cpp	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -57,8 +57,8 @@
 
    //Now test lists
    {
-      BaseList::reverse_iterator rbit(baselist.rbegin()), rbitend(baselist.rend());
-      MemberList::iterator mit(memberlist.begin()), mitend(memberlist.end());
+      BaseList::reverse_iterator rbit(baselist.rbegin());
+      MemberList::iterator mit(memberlist.begin());
       VectIt  it(values.begin()), itend(values.end());
 
       //Test the objects inserted in the base hook list
Modified: branches/release/libs/intrusive/example/doc_list.cpp
==============================================================================
--- branches/release/libs/intrusive/example/doc_list.cpp	(original)
+++ branches/release/libs/intrusive/example/doc_list.cpp	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -58,8 +58,8 @@
 
    //Now test lists
    {
-      BaseList::reverse_iterator rbit(baselist.rbegin()), rbitend(baselist.rend());
-      MemberList::iterator mit(memberlist.begin()), mitend(memberlist.end());
+      BaseList::reverse_iterator rbit(baselist.rbegin());
+      MemberList::iterator mit(memberlist.begin());
       VectIt  it(values.begin()), itend(values.end());
 
       //Test the objects inserted in the base hook list
Modified: branches/release/libs/intrusive/example/doc_offset_ptr.cpp
==============================================================================
--- branches/release/libs/intrusive/example/doc_offset_ptr.cpp	(original)
+++ branches/release/libs/intrusive/example/doc_offset_ptr.cpp	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -10,6 +10,18 @@
 //
 /////////////////////////////////////////////////////////////////////////////
 
+#include <boost/config.hpp>
+
+#ifdef BOOST_NO_EXCEPTIONS
+
+//Interprocess does not support BOOST_NO_EXCEPTIONS so nothing to test here
+int main()
+{
+   return 0;
+}
+
+#else //!BOOST_NO_EXCEPTIONS
+
 //This is needed to allow concurrent test execution in
 //several platforms. The shared memory must be unique
 //for each process...
@@ -100,3 +112,6 @@
    return 0;
 }
 //]
+
+#endif //BOOST_NO_EXCEPTIONS
+
Modified: branches/release/libs/intrusive/example/doc_set.cpp
==============================================================================
--- branches/release/libs/intrusive/example/doc_set.cpp	(original)
+++ branches/release/libs/intrusive/example/doc_set.cpp	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -69,8 +69,8 @@
 
    //Now test sets
    {
-      BaseSet::reverse_iterator rbit(baseset.rbegin()), rbitend(baseset.rend());
-      MemberMultiset::iterator mit(membermultiset.begin()), mitend(membermultiset.end());
+      BaseSet::reverse_iterator rbit(baseset.rbegin());
+      MemberMultiset::iterator mit(membermultiset.begin());
       VectIt it(values.begin()), itend(values.end());
 
       //Test the objects inserted in the base hook set
Modified: branches/release/libs/intrusive/example/doc_sg_set.cpp
==============================================================================
--- branches/release/libs/intrusive/example/doc_sg_set.cpp	(original)
+++ branches/release/libs/intrusive/example/doc_sg_set.cpp	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -68,8 +68,8 @@
 
    //Now test sg_sets
    {
-      BaseSet::reverse_iterator rbit(baseset.rbegin()), rbitend(baseset.rend());
-      MemberMultiset::iterator mit(membermultiset.begin()), mitend(membermultiset.end());
+      BaseSet::reverse_iterator rbit(baseset.rbegin());
+      MemberMultiset::iterator mit(membermultiset.begin());
       VectIt it(values.begin()), itend(values.end());
 
       //Test the objects inserted in the base hook sg_set
Modified: branches/release/libs/intrusive/example/doc_slist.cpp
==============================================================================
--- branches/release/libs/intrusive/example/doc_slist.cpp	(original)
+++ branches/release/libs/intrusive/example/doc_slist.cpp	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -60,8 +60,8 @@
 
    //Now test lists
    {
-      BaseList::iterator bit(baselist.begin()), bitend(baselist.end());
-      MemberList::iterator mit(memberlist.begin()), mitend(memberlist.end());
+      BaseList::iterator bit(baselist.begin());
+      MemberList::iterator mit(memberlist.begin());
       VectRit rit(values.rbegin()), ritend(values.rend());
       VectIt  it(values.begin()), itend(values.end());
 
Modified: branches/release/libs/intrusive/example/doc_splay_set.cpp
==============================================================================
--- branches/release/libs/intrusive/example/doc_splay_set.cpp	(original)
+++ branches/release/libs/intrusive/example/doc_splay_set.cpp	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -72,9 +72,9 @@
 
    //Now test sets
    {
-      BaseSplaySet::reverse_iterator rbit(baseset.rbegin()), rbitend(baseset.rend());
-      BaseBsSplaySet::iterator bsit(bsbaseset.begin()), bsitend(bsbaseset.end());
-      MemberSplayMultiset::iterator mit(membermultiset.begin()), mitend(membermultiset.end());
+      BaseSplaySet::reverse_iterator rbit(baseset.rbegin());
+      BaseBsSplaySet::iterator bsit(bsbaseset.begin());
+      MemberSplayMultiset::iterator mit(membermultiset.begin());
       VectIt it(values.begin()), itend(values.end());
 
       //Test the objects inserted in the base hook set
Modified: branches/release/libs/intrusive/example/doc_treap_set.cpp
==============================================================================
--- branches/release/libs/intrusive/example/doc_treap_set.cpp	(original)
+++ branches/release/libs/intrusive/example/doc_treap_set.cpp	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -79,8 +79,8 @@
 
    //Now test treap_sets
    {
-      BaseSet::reverse_iterator rbit(baseset.rbegin()), rbitend(baseset.rend());
-      MemberMultiset::iterator mit(membermultiset.begin()), mitend(membermultiset.end());
+      BaseSet::reverse_iterator rbit(baseset.rbegin());
+      MemberMultiset::iterator mit(membermultiset.begin());
       VectIt it(values.begin()), itend(values.end());
 
       //Test the objects inserted in the base hook treap_set
Modified: branches/release/libs/intrusive/example/doc_unordered_set.cpp
==============================================================================
--- branches/release/libs/intrusive/example/doc_unordered_set.cpp	(original)
+++ branches/release/libs/intrusive/example/doc_unordered_set.cpp	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -71,8 +71,7 @@
       base_set.insert(*it);
 
    //Now insert values's and values2's elements in the unordered_multiset
-   for(VectIt it(values.begin()), itend(values.end()),
-             it2(values2.begin()),itend2(values2.end())
+   for(VectIt it(values.begin()), itend(values.end()), it2(values2.begin())
       ; it != itend; ++it, ++it2){
       member_multi_set.insert(*it);
       member_multi_set.insert(*it2);
Modified: branches/release/libs/intrusive/test/Jamfile.v2
==============================================================================
--- branches/release/libs/intrusive/test/Jamfile.v2	(original)
+++ branches/release/libs/intrusive/test/Jamfile.v2	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -20,14 +20,10 @@
 
    for local fileb in [ glob *.cpp ]
    {
-      all_rules += [ run $(fileb) /boost/thread//boost_thread
+      all_rules += [ run $(fileb)
       :  # additional args
       :  # test-files
       :  # requirements
-        <toolset>acc:<linkflags>-lrt
-        <toolset>acc-pa_risc:<linkflags>-lrt
-        <toolset>gcc-mingw:<linkflags>"-lole32 -loleaut32"
-        <host-os>hpux,<toolset>gcc:<linkflags>"-Wl,+as,mpas"
         <host-os>windows,<toolset>clang:<linkflags>"-lole32 -loleaut32 -lpsapi -ladvapi32"
       ] ;
    }
@@ -35,4 +31,4 @@
    return $(all_rules) ;
 }
 
-test-suite intrusive_test : [ test_all r ] : <threading>multi ;
\ No newline at end of file
+test-suite intrusive_test : [ test_all r ] : ;
\ No newline at end of file
Modified: branches/release/libs/intrusive/test/any_test.cpp
==============================================================================
--- branches/release/libs/intrusive/test/any_test.cpp	(original)
+++ branches/release/libs/intrusive/test/any_test.cpp	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -164,8 +164,8 @@
 
    //Now test lists
    {
-      BaseList::iterator bit(baselist.begin()), bitend(baselist.end());
-      MemberList::iterator mit(memberlist.begin()), mitend(memberlist.end());
+      BaseList::iterator bit(baselist.begin());
+      MemberList::iterator mit(memberlist.begin());
       VectRit rit(values.rbegin()), ritend(values.rend());
       VectIt  it(values.begin()), itend(values.end());
 
Modified: branches/release/libs/intrusive/test/test_container.hpp
==============================================================================
--- branches/release/libs/intrusive/test/test_container.hpp	(original)
+++ branches/release/libs/intrusive/test/test_container.hpp	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -57,7 +57,7 @@
       for(i = 0; i < num_elem; ++i){
          ++it;
       }
-      BOOST_TEST( it == c.end() );
+      BOOST_TEST( it == itend );
       BOOST_TEST( c.size() == i );
    }
 
@@ -69,7 +69,7 @@
       for(i = 0; i < num_elem; ++i){
          ++it;
       }
-      BOOST_TEST( it == c.cend() );
+      BOOST_TEST( it == itend );
       BOOST_TEST( c.size() == i );
    }
 }
Modified: branches/release/libs/move/doc/Jamfile.v2
==============================================================================
--- branches/release/libs/move/doc/Jamfile.v2	(original)
+++ branches/release/libs/move/doc/Jamfile.v2	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -30,8 +30,8 @@
    :
       move
    :
-        <xsl:param>boost.root=../../../..
-        <xsl:param>boost.libraries=../../../../libs/libraries.htm
+        <format>html:<xsl:param>boost.root=../../../..
+        <format>html:<xsl:param>boost.libraries=../../../../libs/libraries.htm
         <xsl:param>generate.section.toc.level=3
         <xsl:param>chunk.first.sections=1
         <dependency>autodoc
Modified: branches/release/libs/move/doc/move.qbk
==============================================================================
--- branches/release/libs/move/doc/move.qbk	(original)
+++ branches/release/libs/move/doc/move.qbk	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -787,6 +787,13 @@
 
 [section:release_notes Release Notes]
 
+[section:release_notes_boost_1_54_00 Boost 1.54 Release]
+
+*  Fixed bugs [@https://svn.boost.org/trac/boost/ticket/7969 #7969]),
+   [@https://svn.boost.org/trac/boost/ticket/8231 #8231]).
+
+[endsect]
+
 [section:release_notes_boost_1_53_00 Boost 1.53 Release]
 
 *  Better header segregation (bug
Modified: branches/release/libs/move/test/move.cpp
==============================================================================
--- branches/release/libs/move/test/move.cpp	(original)
+++ branches/release/libs/move/test/move.cpp	2013-05-18 06:52:46 EDT (Sat, 18 May 2013)
@@ -108,7 +108,6 @@
       movable m2(boost::move(m));
       movable m3(move_return_function2());
         }
-   //limitations_test();
 
    return 0;
 }