Boost logo

Boost-Commit :

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;
 }


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