Boost logo

Boost-Commit :

From: eric_at_[hidden]
Date: 2008-04-14 18:16:47


Author: eric_niebler
Date: 2008-04-14 18:16:44 EDT (Mon, 14 Apr 2008)
New Revision: 44425
URL: http://svn.boost.org/trac/boost/changeset/44425

Log:
Merged revisions 44411-44412,44416-44417,44419,44422,44424 via svnmerge from
https://svn.boost.org/svn/boost/trunk

................
  r44411 | speedsnail | 2008-04-14 06:27:46 -0700 (Mon, 14 Apr 2008) | 2 lines
  
  Added "contrib" subdirectory for user contributed modules that are not yet fully reviewed.
  Added first module: boost.jam for linking to prebuilt (decorated) boost libraries.
................
  r44412 | dgregor | 2008-04-14 06:51:18 -0700 (Mon, 14 Apr 2008) | 1 line
  
  Define is_mpi_datatype appropriately for wchar_t and long long/int64 types
................
  r44416 | dgregor | 2008-04-14 07:57:33 -0700 (Mon, 14 Apr 2008) | 1 line
  
  Fix compilation on GCC 4.3, from Maik Beckmann
................
  r44417 | danieljames | 2008-04-14 08:10:26 -0700 (Mon, 14 Apr 2008) | 55 lines
  
  Add the new allocator constructors, use composition instead of inheritance for the implementation and some small fixes.
  
  Merged revisions 43922,43962,43966,43971,43981,43995-43996,44042,44046-44048,44057 via svnmerge from
  https://svn.boost.org/svn/boost/branches/unordered/trunk
  
  ........
    r43922 | danieljames | 2008-03-29 14:55:59 +0000 (Sat, 29 Mar 2008) | 1 line
    
    Fix some typos in the reference documentation.
  ........
    r43962 | danieljames | 2008-03-31 18:29:59 +0100 (Mon, 31 Mar 2008) | 1 line
    
    Add a name variable to the release script, so that I can have different release names in different branches.
  ........
    r43966 | danieljames | 2008-03-31 18:43:16 +0100 (Mon, 31 Mar 2008) | 1 line
    
    Fix the image directory for standalone docs.
  ........
    r43971 | danieljames | 2008-03-31 19:17:25 +0100 (Mon, 31 Mar 2008) | 1 line
    
    Fix the unordered stylesheet.
  ........
    r43981 | danieljames | 2008-04-01 13:31:26 +0100 (Tue, 01 Apr 2008) | 2 lines
    
    Cast the pointer in the Visual C++ 6.5 _Charalloc method.
  ........
    r43995 | danieljames | 2008-04-02 12:50:27 +0100 (Wed, 02 Apr 2008) | 1 line
    
    Try using the interprocess containers for testing. Compilation is a bit slower but hopefully I'll run into less cross-platform problems.
  ........
    r43996 | danieljames | 2008-04-02 13:25:49 +0100 (Wed, 02 Apr 2008) | 1 line
    
    Revert my experiment with the interprocess containers. It didn't work out.
  ........
    r44042 | danieljames | 2008-04-04 20:38:09 +0100 (Fri, 04 Apr 2008) | 1 line
    
    Make hash table data a member of hash table, instead of a base.
  ........
    r44046 | danieljames | 2008-04-05 12:38:05 +0100 (Sat, 05 Apr 2008) | 1 line
    
    Remove rvalue_ref from Jamfile.v2 - I didn't mean to check it in.
  ........
    r44047 | danieljames | 2008-04-05 12:39:38 +0100 (Sat, 05 Apr 2008) | 1 line
    
    New constructors with allocators.
  ........
    r44048 | danieljames | 2008-04-05 12:58:11 +0100 (Sat, 05 Apr 2008) | 1 line
    
    Document the new constructors.
  ........
    r44057 | danieljames | 2008-04-05 17:08:23 +0100 (Sat, 05 Apr 2008) | 1 line
    
    Fix some bugs in the exception testing code.
  ........
................
  r44419 | emildotchevski | 2008-04-14 10:31:38 -0700 (Mon, 14 Apr 2008) | 1 line
  
  minor to_string fix
................
  r44422 | johnmaddock | 2008-04-14 11:06:59 -0700 (Mon, 14 Apr 2008) | 1 line
  
  Move Boost.Config build rules into libs/config/test and fix the serialization build rules accordingly.
................
  r44424 | anthonyw | 2008-04-14 14:04:33 -0700 (Mon, 14 Apr 2008) | 1 line
  
  Fix for issue #1657
................

Added:
   branches/proto/v4/libs/config/test/all/
      - copied from r44424, /trunk/libs/config/test/all/
   branches/proto/v4/libs/config/test/all/Jamfile.v2
      - copied unchanged from r44424, /trunk/libs/config/test/all/Jamfile.v2
   branches/proto/v4/libs/config/test/all/options_v2.jam
      - copied unchanged from r44424, /trunk/libs/config/test/all/options_v2.jam
   branches/proto/v4/tools/build/v2/contrib/
      - copied from r44424, /trunk/tools/build/v2/contrib/
   branches/proto/v4/tools/build/v2/contrib/boost.jam
      - copied unchanged from r44424, /trunk/tools/build/v2/contrib/boost.jam
Removed:
   branches/proto/v4/libs/config/test/options.jam
   branches/proto/v4/libs/config/test/options_v2.jam
Properties modified:
   branches/proto/v4/ (props changed)
Text files modified:
   branches/proto/v4/boost/exception/to_string.hpp | 3
   branches/proto/v4/boost/mpi/datatype.hpp | 33 ++-
   branches/proto/v4/boost/mpi/detail/binary_buffer_iprimitive.hpp | 1
   branches/proto/v4/boost/unordered/detail/hash_table_impl.hpp | 157 +++++++++-------
   branches/proto/v4/boost/unordered_map.hpp | 79 +++++--
   branches/proto/v4/boost/unordered_set.hpp | 80 +++++--
   branches/proto/v4/libs/config/test/Jamfile.v2 | 390 +++------------------------------------
   branches/proto/v4/libs/config/test/config_info.cpp | 4
   branches/proto/v4/libs/config/test/config_test.cpp | 2
   branches/proto/v4/libs/config/tools/generate.cpp | 45 +---
   branches/proto/v4/libs/functional/hash/doc/Jamfile.v2 | 6
   branches/proto/v4/libs/serialization/build/Jamfile.v2 | 4
   branches/proto/v4/libs/serialization/test/Jamfile.v2 | 4
   branches/proto/v4/libs/serialization/util/test.jam | 2
   branches/proto/v4/libs/thread/example/condition.cpp | 12 +
   branches/proto/v4/libs/unordered/doc/Jamfile.v2 | 4
   branches/proto/v4/libs/unordered/doc/ref.xml | 176 +++++++++++------
   branches/proto/v4/libs/unordered/test/exception/constructor_exception_tests.cpp | 10
   branches/proto/v4/libs/unordered/test/exception/copy_exception_tests.cpp | 16 +
   branches/proto/v4/libs/unordered/test/helpers/allocator.hpp | 2
   branches/proto/v4/libs/unordered/test/helpers/exception_test.hpp | 7
   branches/proto/v4/libs/unordered/test/unordered/Jamfile.v2 | 2
   branches/proto/v4/libs/unordered/test/unordered/constructor_tests.cpp | 11 +
   branches/proto/v4/libs/unordered/test/unordered/copy_tests.cpp | 24 ++
   branches/proto/v4/status/Jamfile.v2 | 48 ----
   branches/proto/v4/tools/build/v2/kernel/bootstrap.jam | 2
   26 files changed, 471 insertions(+), 653 deletions(-)

Modified: branches/proto/v4/boost/exception/to_string.hpp
==============================================================================
--- branches/proto/v4/boost/exception/to_string.hpp (original)
+++ branches/proto/v4/boost/exception/to_string.hpp 2008-04-14 18:16:44 EDT (Mon, 14 Apr 2008)
@@ -33,7 +33,8 @@
         struct
         has_to_string_impl<T,false>
             {
- enum e { value=1!=sizeof(to_string(*(T*)0)) };
+ static T const & f();
+ enum e { value=1!=sizeof(to_string(f())) };
             };
         }
 

Modified: branches/proto/v4/boost/mpi/datatype.hpp
==============================================================================
--- branches/proto/v4/boost/mpi/datatype.hpp (original)
+++ branches/proto/v4/boost/mpi/datatype.hpp 2008-04-14 18:16:44 EDT (Mon, 14 Apr 2008)
@@ -263,25 +263,38 @@
 {
 };
 
-
-#if 0
-#ifndef BOOST_NO_INTRINSIC_WCHAR_T
+// Define wchar_t specialization of is_mpi_datatype, if possible.
+#if !defined(BOOST_NO_INTRINSIC_WCHAR_T) && \
+ (defined(MPI_WCHAR) || (defined(MPI_VERSION) && MPI_VERSION >= 2))
 BOOST_MPI_DATATYPE(wchar_t, MPI_WCHAR, builtin);
 #endif
 
-#ifdef BOOST_HAS_LONG_LONG
+// Define long long or __int64 specialization of is_mpi_datatype, if possible.
+#if defined(BOOST_HAS_LONG_LONG) && \
+ (defined(MPI_LONG_LONG_INT) || (defined(MPI_VERSION) && MPI_VERSION >= 2))
 BOOST_MPI_DATATYPE(long long, MPI_LONG_LONG_INT, builtin);
-BOOST_MPI_DATATYPE(unsigned long long, MPI_UNSIGNED_LONG_LONG, builtin);
-#endif
+#elif defined(BOOST_HAS_MS_INT64) && \
+ (defined(MPI_LONG_LONG_INT) || (defined(MPI_VERSION) && MPI_VERSION >= 2))
+BOOST_MPI_DATATYPE(__int64, MPI_LONG_LONG_INT, builtin);
 #endif
 
-#endif // Doxygen
-
-#if defined(BOOST_MSVC) || defined(BOOST_INTEL_WIN)
-BOOST_MPI_DATATYPE(__int64, MPI_LONG_LONG_INT, builtin);
+// Define unsigned long long or unsigned __int64 specialization of
+// is_mpi_datatype, if possible. We separate this from the check for
+// the (signed) long long/__int64 because some MPI implementations
+// (e.g., MPICH-MX) have MPI_LONG_LONG_INT but not
+// MPI_UNSIGNED_LONG_LONG.
+#if defined(BOOST_HAS_LONG_LONG) && \
+ (defined(MPI_UNSIGNED_LONG_LONG) \
+ || (defined(MPI_VERSION) && MPI_VERSION >= 2))
+BOOST_MPI_DATATYPE(unsigned long long, MPI_UNSIGNED_LONG_LONG, builtin);
+#elif defined(BOOST_HAS_MS_INT64) && \
+ (defined(MPI_UNSIGNED_LONG_LONG) \
+ || (defined(MPI_VERSION) && MPI_VERSION >= 2))
 BOOST_MPI_DATATYPE(unsigned __int64, MPI_UNSIGNED_LONG_LONG, builtin);
 #endif
 
+#endif // Doxygen
+
 namespace detail {
   inline MPI_Datatype build_mpi_datatype_for_bool()
   {

Modified: branches/proto/v4/boost/mpi/detail/binary_buffer_iprimitive.hpp
==============================================================================
--- branches/proto/v4/boost/mpi/detail/binary_buffer_iprimitive.hpp (original)
+++ branches/proto/v4/boost/mpi/detail/binary_buffer_iprimitive.hpp 2008-04-14 18:16:44 EDT (Mon, 14 Apr 2008)
@@ -20,6 +20,7 @@
 #include <boost/serialization/is_bitwise_serializable.hpp>
 #include <vector>
 #include <boost/mpi/allocator.hpp>
+#include <cstring> // for memcpy
 
 namespace boost { namespace mpi {
 

Modified: branches/proto/v4/boost/unordered/detail/hash_table_impl.hpp
==============================================================================
--- branches/proto/v4/boost/unordered/detail/hash_table_impl.hpp (original)
+++ branches/proto/v4/boost/unordered/detail/hash_table_impl.hpp 2008-04-14 18:16:44 EDT (Mon, 14 Apr 2008)
@@ -951,7 +951,6 @@
             typename Hash, typename Pred,
             typename Alloc>
         class BOOST_UNORDERED_TABLE
- : public BOOST_UNORDERED_TABLE_DATA<Alloc>
         {
             typedef BOOST_UNORDERED_TABLE_DATA<Alloc> data;
 
@@ -1014,6 +1013,8 @@
 
         public:
 
+ data data_;
+
             // Constructors
             //
             // In the constructors, if anything throws an exception,
@@ -1022,11 +1023,11 @@
             BOOST_UNORDERED_TABLE(size_type n,
                     hasher const& hf, key_equal const& eq,
                     value_allocator const& a)
- : data(n, a), // throws, cleans itself up
- func1_(hf, eq), // throws " "
- func2_(hf, eq), // throws " "
+ : func1_(hf, eq), // throws, cleans itself up
+ func2_(hf, eq), // throws, cleans itself up
                 func_(&BOOST_UNORDERED_TABLE::func1_), // no throw
- mlf_(1.0f) // no throw
+ mlf_(1.0f), // no throw
+ data_(n, a) // throws, cleans itself up
             {
                 calculate_max_load(); // no throw
             }
@@ -1068,31 +1069,49 @@
             BOOST_UNORDERED_TABLE(I i, I j, size_type n,
                     hasher const& hf, key_equal const& eq,
                     value_allocator const& a)
- : data(initial_size(i, j, n), a), // throws, cleans itself up
- func1_(hf, eq), // throws " "
- func2_(hf, eq), // throws " "
+ : func1_(hf, eq), // throws, cleans itself up
+ func2_(hf, eq), // throws, cleans itself up
                     func_(&BOOST_UNORDERED_TABLE::func1_), // no throw
- mlf_(1.0f) // no throw
+ mlf_(1.0f), // no throw
+ data_(initial_size(i, j, n), a) // throws, cleans itself up
             {
                 calculate_max_load(); // no throw
 
                 // This can throw, but BOOST_UNORDERED_TABLE_DATA's destructor will clean up.
                 insert(i, j);
             }
+
             // Copy Construct
 
             BOOST_UNORDERED_TABLE(BOOST_UNORDERED_TABLE const& x)
- : data(x, x.min_buckets_for_size(x.size())), // throws
- func1_(x.current_functions()), // throws
+ : func1_(x.current_functions()), // throws
                 func2_(x.current_functions()), // throws
                 func_(&BOOST_UNORDERED_TABLE::func1_), // no throw
- mlf_(x.mlf_) // no throw
+ mlf_(x.mlf_), // no throw
+ data_(x.data_, x.min_buckets_for_size(x.size())) // throws
+ {
+ calculate_max_load(); // no throw
+
+ // This can throw, but BOOST_UNORDERED_TABLE_DATA's destructor will clean
+ // up.
+ copy_buckets(x.data_, data_, current_functions());
+ }
+
+ // Copy Construct with allocator
+
+ BOOST_UNORDERED_TABLE(BOOST_UNORDERED_TABLE const& x,
+ value_allocator const& a)
+ : func1_(x.current_functions()), // throws
+ func2_(x.current_functions()), // throws
+ func_(&BOOST_UNORDERED_TABLE::func1_), // no throw
+ mlf_(x.mlf_), // no throw
+ data_(x.min_buckets_for_size(x.size()), a)
             {
                 calculate_max_load(); // no throw
 
                 // This can throw, but BOOST_UNORDERED_TABLE_DATA's destructor will clean
                 // up.
- copy_buckets(x, *this, current_functions());
+ copy_buckets(x.data_, data_, current_functions());
             }
 
             // Assign
@@ -1106,12 +1125,12 @@
             {
                 if(this != &x)
                 {
- this->clear(); // no throw
+ data_.clear(); // no throw
                     func_ = copy_functions(x); // throws, strong
                     mlf_ = x.mlf_; // no throw
                     calculate_max_load(); // no throw
                     reserve(x.size()); // throws
- copy_buckets(x, *this, current_functions()); // throws
+ copy_buckets(x.data_, data_, current_functions()); // throws
                 }
 
                 return *this;
@@ -1138,22 +1157,22 @@
                 functions_ptr new_func_this = copy_functions(x); // throws
                 functions_ptr new_func_that = x.copy_functions(*this); // throws
 
- if(this->allocators_ == x.allocators_) {
- this->data::swap(x); // no throw
+ if(data_.allocators_ == x.data_.allocators_) {
+ data_.swap(x.data_); // no throw
                 }
                 else {
                     // Create new buckets in separate HASH_TABLE_DATA objects
                     // which will clean up if anything throws an exception.
                     // (all can throw, but with no effect as these are new objects).
- data new_this(*this, x.min_buckets_for_size(x.size_));
- copy_buckets(x, new_this, this->*new_func_this);
+ data new_this(data_, x.min_buckets_for_size(x.data_.size_));
+ copy_buckets(x.data_, new_this, this->*new_func_this);
 
- data new_that(x, min_buckets_for_size(this->size_));
- x.copy_buckets(*this, new_that, x.*new_func_that);
+ data new_that(x.data_, min_buckets_for_size(data_.size_));
+ x.copy_buckets(data_, new_that, x.*new_func_that);
 
                     // Start updating the data here, no throw from now on.
- this->data::swap(new_this);
- x.data::swap(new_that);
+ data_.swap(new_this);
+ x.data_.swap(new_that);
                 }
 
                 // We've made it, the rest is no throw.
@@ -1196,7 +1215,7 @@
             // no throw
             value_allocator get_allocator() const
             {
- return this->allocators_.value_alloc_;
+ return data_.allocators_.value_alloc_;
             }
 
             // no throw
@@ -1214,13 +1233,13 @@
             // no throw
             size_type size() const
             {
- return this->size_;
+ return data_.size_;
             }
 
             // no throw
             bool empty() const
             {
- return this->size_ == 0;
+ return data_.size_ == 0;
             }
 
             // no throw
@@ -1237,27 +1256,27 @@
             size_type bucket(key_type const& k) const
             {
                 // hash_function can throw:
- return hash_function()(k) % this->bucket_count_;
+ return hash_function()(k) % data_.bucket_count_;
             }
 
 
             // strong safety
             bucket_ptr get_bucket(key_type const& k) const
             {
- return this->buckets_ + static_cast<difference_type>(bucket(k));
+ return data_.buckets_ + static_cast<difference_type>(bucket(k));
             }
 
             // no throw
             size_type bucket_count() const
             {
- return this->bucket_count_;
+ return data_.bucket_count_;
             }
 
             // no throw
             size_type max_bucket_count() const
             {
                 // -1 to account for the end marker.
- return prev_prime(this->allocators_.bucket_alloc_.max_size() - 1);
+ return prev_prime(data_.allocators_.bucket_alloc_.max_size() - 1);
             }
 
         private:
@@ -1286,7 +1305,7 @@
                 // From 6.3.1/13:
                 // Only resize when size >= mlf_ * count
                 max_load_ = double_to_size_t(ceil(
- (double) mlf_ * this->bucket_count_));
+ (double) mlf_ * data_.bucket_count_));
             }
 
             // basic exception safety
@@ -1338,9 +1357,9 @@
             // no throw
             float load_factor() const
             {
- BOOST_ASSERT(this->bucket_count_ != 0);
- return static_cast<float>(this->size_)
- / static_cast<float>(this->bucket_count_);
+ BOOST_ASSERT(data_.bucket_count_ != 0);
+ return static_cast<float>(data_.size_)
+ / static_cast<float>(data_.bucket_count_);
             }
 
         private:
@@ -1393,10 +1412,10 @@
                 if (n == bucket_count()) // no throw
                     return;
 
- data new_buckets(*this, n); // throws, seperate
- move_buckets(*this, new_buckets, hash_function());
+ data new_buckets(data_, n); // throws, seperate
+ move_buckets(data_, new_buckets, hash_function());
                                                         // basic/no throw
- new_buckets.swap(*this); // no throw
+ new_buckets.swap(data_); // no throw
                 calculate_max_load(); // no throw
             }
 
@@ -1471,18 +1490,18 @@
             {
                 key_type const& k = extract_key(v);
                 size_type hash_value = hash_function()(k);
- bucket_ptr bucket = this->bucket_from_hash(hash_value);
+ bucket_ptr bucket = data_.bucket_from_hash(hash_value);
                 link_ptr position = find_iterator(bucket, k);
 
                 // Create the node before rehashing in case it throws an
                 // exception (need strong safety in such a case).
- node_constructor a(this->allocators_);
+ node_constructor a(data_.allocators_);
                 a.construct(v);
 
                 // reserve has basic exception safety if the hash function
                 // throws, strong otherwise.
                 if(reserve(size() + 1))
- bucket = this->bucket_from_hash(hash_value);
+ bucket = data_.bucket_from_hash(hash_value);
 
                 // Nothing after the point can throw.
 
@@ -1491,9 +1510,9 @@
                 // I'm relying on link_ptr not being invalidated by
                 // the rehash here.
                 if(BOOST_UNORDERED_BORLAND_BOOL(position))
- this->link_node(n, position);
+ data_.link_node(n, position);
                 else
- this->link_node_in_bucket(n, bucket);
+ data_.link_node_in_bucket(n, bucket);
 
                 return iterator_base(bucket, n);
             }
@@ -1505,7 +1524,7 @@
             iterator_base insert(iterator_base const& it, value_type const& v)
             {
                 // equal can throw, but with no effects
- if (it == this->end() || !equal(extract_key(v), *it)) {
+ if (it == data_.end() || !equal(extract_key(v), *it)) {
                     // Use the standard insert if the iterator doesn't point
                     // to a matching key.
                     return insert(v);
@@ -1515,12 +1534,12 @@
                     // will be inserted at the end of the group.
 
                     link_ptr start(it.node_);
- while(this->prev_in_group(start)->next_ == start)
- start = this->prev_in_group(start);
+ while(data_.prev_in_group(start)->next_ == start)
+ start = data_.prev_in_group(start);
 
                     // Create the node before rehashing in case it throws an
                     // exception (need strong safety in such a case).
- node_constructor a(this->allocators_);
+ node_constructor a(data_.allocators_);
                     a.construct(v);
 
                     // reserve has basic exception safety if the hash function
@@ -1531,7 +1550,7 @@
                     // Nothing after this point can throw
 
                     link_ptr n = a.release();
- this->link_node(n, start);
+ data_.link_node(n, start);
 
                     return iterator_base(base, n);
                 }
@@ -1553,7 +1572,7 @@
                 else {
                     // Only require basic exception safety here
                     reserve_extra(size() + distance);
- node_constructor a(this->allocators_);
+ node_constructor a(data_.allocators_);
 
                     for (; i != j; ++i) {
                         a.construct(*i);
@@ -1563,9 +1582,9 @@
                         link_ptr position = find_iterator(bucket, k);
 
                         if(BOOST_UNORDERED_BORLAND_BOOL(position))
- this->link_node(a.release(), position);
+ data_.link_node(a.release(), position);
                         else
- this->link_node_in_bucket(a.release(), bucket);
+ data_.link_node_in_bucket(a.release(), bucket);
                     }
                 }
             }
@@ -1602,7 +1621,7 @@
                 typedef BOOST_DEDUCED_TYPENAME value_type::second_type mapped_type;
 
                 size_type hash_value = hash_function()(k);
- bucket_ptr bucket = this->bucket_from_hash(hash_value);
+ bucket_ptr bucket = data_.bucket_from_hash(hash_value);
                 link_ptr pos = find_iterator(bucket, k);
 
                 if (BOOST_UNORDERED_BORLAND_BOOL(pos))
@@ -1613,18 +1632,18 @@
 
                     // Create the node before rehashing in case it throws an
                     // exception (need strong safety in such a case).
- node_constructor a(this->allocators_);
+ node_constructor a(data_.allocators_);
                     a.construct(value_type(k, mapped_type()));
 
                     // reserve has basic exception safety if the hash function
                     // throws, strong otherwise.
                     if(reserve(size() + 1))
- bucket = this->bucket_from_hash(hash_value);
+ bucket = data_.bucket_from_hash(hash_value);
 
                     // Nothing after this point can throw.
 
                     link_ptr n = a.release();
- this->link_node_in_bucket(n, bucket);
+ data_.link_node_in_bucket(n, bucket);
 
                     return data::get_value(n);
                 }
@@ -1639,7 +1658,7 @@
                 // No side effects in this initial code
                 key_type const& k = extract_key(v);
                 size_type hash_value = hash_function()(k);
- bucket_ptr bucket = this->bucket_from_hash(hash_value);
+ bucket_ptr bucket = data_.bucket_from_hash(hash_value);
                 link_ptr pos = find_iterator(bucket, k);
                 
                 if (BOOST_UNORDERED_BORLAND_BOOL(pos)) {
@@ -1653,18 +1672,18 @@
 
                     // Create the node before rehashing in case it throws an
                     // exception (need strong safety in such a case).
- node_constructor a(this->allocators_);
+ node_constructor a(data_.allocators_);
                     a.construct(v);
 
                     // reserve has basic exception safety if the hash function
                     // throws, strong otherwise.
                     if(reserve(size() + 1))
- bucket = this->bucket_from_hash(hash_value);
+ bucket = data_.bucket_from_hash(hash_value);
 
                     // Nothing after this point can throw.
 
                     link_ptr n = a.release();
- this->link_node_in_bucket(n, bucket);
+ data_.link_node_in_bucket(n, bucket);
 
                     return std::pair<iterator_base, bool>(
                         iterator_base(bucket, n), true);
@@ -1677,7 +1696,7 @@
             // strong otherwise
             iterator_base insert(iterator_base const& it, value_type const& v)
             {
- if(it != this->end() && equal(extract_key(v), *it))
+ if(it != data_.end() && equal(extract_key(v), *it))
                     return it;
                 else
                     return insert(v).first;
@@ -1710,12 +1729,12 @@
             template <typename InputIterator>
             void insert(InputIterator i, InputIterator j)
             {
- node_constructor a(this->allocators_);
+ node_constructor a(data_.allocators_);
 
                 for (; i != j; ++i) {
                     // No side effects in this initial code
                     size_type hash_value = hash_function()(extract_key(*i));
- bucket_ptr bucket = this->bucket_from_hash(hash_value);
+ bucket_ptr bucket = data_.bucket_from_hash(hash_value);
                     link_ptr pos = find_iterator(bucket, extract_key(*i));
                     
                     if (!BOOST_UNORDERED_BORLAND_BOOL(pos)) {
@@ -1730,11 +1749,11 @@
                         // throws, strong otherwise.
                         if(size() + 1 >= max_load_) {
                             reserve(size() + insert_size(i, j));
- bucket = this->bucket_from_hash(hash_value);
+ bucket = data_.bucket_from_hash(hash_value);
                         }
 
                         // Nothing after this point can throw.
- this->link_node_in_bucket(a.release(), bucket);
+ data_.link_node_in_bucket(a.release(), bucket);
                     }
                 }
             }
@@ -1746,7 +1765,7 @@
             // no throw
             iterator_base erase(iterator_base const& r)
             {
- return this->data::erase(r);
+ return data_.data::erase(r);
             }
 
             // strong exception safety
@@ -1757,13 +1776,13 @@
                 link_ptr* it = find_for_erase(bucket, k);
 
                 // No throw.
- return *it ? this->erase_group(it, bucket) : 0;
+ return *it ? data_.erase_group(it, bucket) : 0;
             }
 
             // no throw
             iterator_base erase(iterator_base const& r1, iterator_base const& r2)
             {
- return this->data::erase(r1, r2);
+ return data_.data::erase(r1, r2);
             }
 
             // count
@@ -1786,7 +1805,7 @@
                 if (BOOST_UNORDERED_BORLAND_BOOL(it))
                     return iterator_base(bucket, it);
                 else
- return this->end();
+ return data_.end();
             }
 
             value_type& at(key_type const& k) const
@@ -1815,7 +1834,7 @@
                 }
                 else {
                     return std::pair<iterator_base, iterator_base>(
- this->end(), this->end());
+ data_.end(), data_.end());
                 }
             }
 
@@ -1837,7 +1856,7 @@
             link_ptr find_iterator(bucket_ptr bucket,
                     key_type const& k) const
             {
- link_ptr it = this->begin(bucket);
+ link_ptr it = data_.begin(bucket);
                 while (BOOST_UNORDERED_BORLAND_BOOL(it) && !equal(k, data::get_value(it)))
                     it = data::next_group(it);
 

Modified: branches/proto/v4/boost/unordered_map.hpp
==============================================================================
--- branches/proto/v4/boost/unordered_map.hpp (original)
+++ branches/proto/v4/boost/unordered_map.hpp 2008-04-14 18:16:44 EDT (Mon, 14 Apr 2008)
@@ -71,6 +71,18 @@
         {
         }
 
+ // TODO: Should this be explicit?
+ unordered_map(allocator_type const& a)
+ : base(boost::unordered_detail::default_initial_bucket_count,
+ hasher(), key_equal(), a)
+ {
+ }
+
+ unordered_map(unordered_map const& other, allocator_type const& a)
+ : base(other.base, a)
+ {
+ }
+
         template <class InputIterator>
         unordered_map(InputIterator f, InputIterator l)
             : base(f, l, boost::unordered_detail::default_initial_bucket_count,
@@ -124,32 +136,32 @@
 
         iterator begin()
         {
- return iterator(base.begin());
+ return iterator(base.data_.begin());
         }
 
         const_iterator begin() const
         {
- return const_iterator(base.begin());
+ return const_iterator(base.data_.begin());
         }
 
         iterator end()
         {
- return iterator(base.end());
+ return iterator(base.data_.end());
         }
 
         const_iterator end() const
         {
- return const_iterator(base.end());
+ return const_iterator(base.data_.end());
         }
 
         const_iterator cbegin() const
         {
- return const_iterator(base.begin());
+ return const_iterator(base.data_.begin());
         }
 
         const_iterator cend() const
         {
- return const_iterator(base.end());
+ return const_iterator(base.data_.end());
         }
 
         // modifiers
@@ -188,7 +200,7 @@
 
         void clear()
         {
- base.clear();
+ base.data_.clear();
         }
 
         void swap(unordered_map& other)
@@ -268,7 +280,7 @@
 
         size_type bucket_size(size_type n) const
         {
- return base.bucket_size(n);
+ return base.data_.bucket_size(n);
         }
 
         size_type bucket(const key_type& k) const
@@ -278,32 +290,32 @@
 
         local_iterator begin(size_type n)
         {
- return local_iterator(base.begin(n));
+ return local_iterator(base.data_.begin(n));
         }
 
         const_local_iterator begin(size_type n) const
         {
- return const_local_iterator(base.begin(n));
+ return const_local_iterator(base.data_.begin(n));
         }
 
         local_iterator end(size_type n)
         {
- return local_iterator(base.end(n));
+ return local_iterator(base.data_.end(n));
         }
 
         const_local_iterator end(size_type n) const
         {
- return const_local_iterator(base.end(n));
+ return const_local_iterator(base.data_.end(n));
         }
 
         const_local_iterator cbegin(size_type n) const
         {
- return const_local_iterator(base.begin(n));
+ return const_local_iterator(base.data_.begin(n));
         }
 
         const_local_iterator cend(size_type n) const
         {
- return const_local_iterator(base.end(n));
+ return const_local_iterator(base.data_.end(n));
         }
 
         // hash policy
@@ -384,6 +396,17 @@
         {
         }
 
+ unordered_multimap(allocator_type const& a)
+ : base(boost::unordered_detail::default_initial_bucket_count,
+ hasher(), key_equal(), a)
+ {
+ }
+
+ unordered_multimap(unordered_multimap const& other, allocator_type const& a)
+ : base(other.base, a)
+ {
+ }
+
         template <class InputIterator>
         unordered_multimap(InputIterator f, InputIterator l)
             : base(f, l, boost::unordered_detail::default_initial_bucket_count,
@@ -437,32 +460,32 @@
 
         iterator begin()
         {
- return iterator(base.begin());
+ return iterator(base.data_.begin());
         }
 
         const_iterator begin() const
         {
- return const_iterator(base.begin());
+ return const_iterator(base.data_.begin());
         }
 
         iterator end()
         {
- return iterator(base.end());
+ return iterator(base.data_.end());
         }
 
         const_iterator end() const
         {
- return const_iterator(base.end());
+ return const_iterator(base.data_.end());
         }
 
         const_iterator cbegin() const
         {
- return const_iterator(base.begin());
+ return const_iterator(base.data_.begin());
         }
 
         const_iterator cend() const
         {
- return const_iterator(base.end());
+ return const_iterator(base.data_.end());
         }
 
         // modifiers
@@ -500,7 +523,7 @@
 
         void clear()
         {
- base.clear();
+ base.data_.clear();
         }
 
         void swap(unordered_multimap& other)
@@ -565,7 +588,7 @@
 
         size_type bucket_size(size_type n) const
         {
- return base.bucket_size(n);
+ return base.data_.bucket_size(n);
         }
 
         size_type bucket(const key_type& k) const
@@ -575,32 +598,32 @@
 
         local_iterator begin(size_type n)
         {
- return local_iterator(base.begin(n));
+ return local_iterator(base.data_.begin(n));
         }
 
         const_local_iterator begin(size_type n) const
         {
- return const_local_iterator(base.begin(n));
+ return const_local_iterator(base.data_.begin(n));
         }
 
         local_iterator end(size_type n)
         {
- return local_iterator(base.end(n));
+ return local_iterator(base.data_.end(n));
         }
 
         const_local_iterator end(size_type n) const
         {
- return const_local_iterator(base.end(n));
+ return const_local_iterator(base.data_.end(n));
         }
 
         const_local_iterator cbegin(size_type n) const
         {
- return const_local_iterator(base.begin(n));
+ return const_local_iterator(base.data_.begin(n));
         }
 
         const_local_iterator cend(size_type n) const
         {
- return const_local_iterator(base.end(n));
+ return const_local_iterator(base.data_.end(n));
         }
 
         // hash policy

Modified: branches/proto/v4/boost/unordered_set.hpp
==============================================================================
--- branches/proto/v4/boost/unordered_set.hpp (original)
+++ branches/proto/v4/boost/unordered_set.hpp 2008-04-14 18:16:44 EDT (Mon, 14 Apr 2008)
@@ -69,6 +69,18 @@
         {
         }
 
+ // TODO: Should this be explicit?
+ unordered_set(allocator_type const& a)
+ : base(boost::unordered_detail::default_initial_bucket_count,
+ hasher(), key_equal(), a)
+ {
+ }
+
+ unordered_set(unordered_set const& other, allocator_type const& a)
+ : base(other.base, a)
+ {
+ }
+
         template <class InputIterator>
         unordered_set(InputIterator f, InputIterator l)
             : base(f, l, boost::unordered_detail::default_initial_bucket_count,
@@ -121,32 +133,32 @@
 
         iterator begin()
         {
- return iterator(base.begin());
+ return iterator(base.data_.begin());
         }
 
         const_iterator begin() const
         {
- return const_iterator(base.begin());
+ return const_iterator(base.data_.begin());
         }
 
         iterator end()
         {
- return iterator(base.end());
+ return iterator(base.data_.end());
         }
 
         const_iterator end() const
         {
- return const_iterator(base.end());
+ return const_iterator(base.data_.end());
         }
 
         const_iterator cbegin() const
         {
- return const_iterator(base.begin());
+ return const_iterator(base.data_.begin());
         }
 
         const_iterator cend() const
         {
- return const_iterator(base.end());
+ return const_iterator(base.data_.end());
         }
 
         // modifiers
@@ -185,7 +197,7 @@
 
         void clear()
         {
- base.clear();
+ base.data_.clear();
         }
 
         void swap(unordered_set& other)
@@ -238,7 +250,7 @@
 
         size_type bucket_size(size_type n) const
         {
- return base.bucket_size(n);
+ return base.data_.bucket_size(n);
         }
 
         size_type bucket(const key_type& k) const
@@ -248,32 +260,32 @@
 
         local_iterator begin(size_type n)
         {
- return local_iterator(base.begin(n));
+ return local_iterator(base.data_.begin(n));
         }
 
         const_local_iterator begin(size_type n) const
         {
- return const_local_iterator(base.begin(n));
+ return const_local_iterator(base.data_.begin(n));
         }
 
         local_iterator end(size_type n)
         {
- return local_iterator(base.end(n));
+ return local_iterator(base.data_.end(n));
         }
 
         const_local_iterator end(size_type n) const
         {
- return const_local_iterator(base.end(n));
+ return const_local_iterator(base.data_.end(n));
         }
 
         const_local_iterator cbegin(size_type n) const
         {
- return const_local_iterator(base.begin(n));
+ return const_local_iterator(base.data_.begin(n));
         }
 
         const_local_iterator cend(size_type n) const
         {
- return const_local_iterator(base.end(n));
+ return const_local_iterator(base.data_.end(n));
         }
 
         // hash policy
@@ -352,6 +364,18 @@
         {
         }
 
+ // TODO: Should this be explicit?
+ unordered_multiset(allocator_type const& a)
+ : base(boost::unordered_detail::default_initial_bucket_count,
+ hasher(), key_equal(), a)
+ {
+ }
+
+ unordered_multiset(unordered_multiset const& other, allocator_type const& a)
+ : base(other.base, a)
+ {
+ }
+
         template <class InputIterator>
         unordered_multiset(InputIterator f, InputIterator l)
             : base(f, l, boost::unordered_detail::default_initial_bucket_count,
@@ -404,32 +428,32 @@
 
         iterator begin()
         {
- return iterator(base.begin());
+ return iterator(base.data_.begin());
         }
 
         const_iterator begin() const
         {
- return const_iterator(base.begin());
+ return const_iterator(base.data_.begin());
         }
 
         iterator end()
         {
- return iterator(base.end());
+ return iterator(base.data_.end());
         }
 
         const_iterator end() const
         {
- return const_iterator(base.end());
+ return const_iterator(base.data_.end());
         }
 
         const_iterator cbegin() const
         {
- return const_iterator(base.begin());
+ return const_iterator(base.data_.begin());
         }
 
         const_iterator cend() const
         {
- return const_iterator(base.end());
+ return const_iterator(base.data_.end());
         }
 
         // modifiers
@@ -467,7 +491,7 @@
 
         void clear()
         {
- base.clear();
+ base.data_.clear();
         }
 
         void swap(unordered_multiset& other)
@@ -520,7 +544,7 @@
 
         size_type bucket_size(size_type n) const
         {
- return base.bucket_size(n);
+ return base.data_.bucket_size(n);
         }
 
         size_type bucket(const key_type& k) const
@@ -530,32 +554,32 @@
 
         local_iterator begin(size_type n)
         {
- return local_iterator(base.begin(n));
+ return local_iterator(base.data_.begin(n));
         }
 
         const_local_iterator begin(size_type n) const
         {
- return const_local_iterator(base.begin(n));
+ return const_local_iterator(base.data_.begin(n));
         }
 
         local_iterator end(size_type n)
         {
- return local_iterator(base.end(n));
+ return local_iterator(base.data_.end(n));
         }
 
         const_local_iterator end(size_type n) const
         {
- return const_local_iterator(base.end(n));
+ return const_local_iterator(base.data_.end(n));
         }
 
         const_local_iterator cbegin(size_type n) const
         {
- return const_local_iterator(base.begin(n));
+ return const_local_iterator(base.data_.begin(n));
         }
 
         const_local_iterator cend(size_type n) const
         {
- return const_local_iterator(base.end(n));
+ return const_local_iterator(base.data_.end(n));
         }
 
         // hash policy

Modified: branches/proto/v4/libs/config/test/Jamfile.v2
==============================================================================
--- branches/proto/v4/libs/config/test/Jamfile.v2 (original)
+++ branches/proto/v4/libs/config/test/Jamfile.v2 2008-04-14 18:16:44 EDT (Mon, 14 Apr 2008)
@@ -1,9 +1,5 @@
 #
-# Regression test Jamfile for boost configuration setup.
-# *** DO NOT EDIT THIS FILE BY HAND ***
-# This file was automatically generated on Wed Apr 09 16:30:14 2008
-# by libs/config/tools/generate.cpp
-# Copyright John Maddock.
+# Copyright John Maddock 2008.
 # Use, modification and distribution are 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)
@@ -11,354 +7,36 @@
 # If you need to alter build preferences then set them in
 # the template defined in options_v2.jam.
 #
-path-constant DOT : . ;
-include $(DOT)/options_v2.jam ;
-
-run config_info.cpp : : : <threading>single <toolset>msvc:<runtime-link>static <toolset>msvc:<link>static ;
-run config_info.cpp : : : <threading>multi : config_info_threaded ;
-run math_info.cpp : : : <toolset>borland:<runtime-link>static <toolset>borland:<link>static ;
-run config_test.cpp : : : <threading>single <toolset>msvc:<runtime-link>static <toolset>msvc:<link>static ;
-run config_test.cpp : : : <threading>multi : config_test_threaded ;
-run limits_test.cpp ../../test/build//boost_test_exec_monitor ;
-run abi/abi_test.cpp abi/main.cpp ;
-
-test-suite "BOOST_HAS_TWO_ARG_USE_FACET" :
-[ run has_2arg_use_facet_pass.cpp ]
-[ compile-fail has_2arg_use_facet_fail.cpp ] ;
-test-suite "BOOST_HAS_BETHREADS" :
-[ run has_bethreads_pass.cpp ]
-[ compile-fail has_bethreads_fail.cpp ] ;
-test-suite "BOOST_HAS_CLOCK_GETTIME" :
-[ run has_clock_gettime_pass.cpp ]
-[ compile-fail has_clock_gettime_fail.cpp ] ;
-test-suite "BOOST_HAS_CONCEPTS" :
-[ run has_concepts_pass.cpp ]
-[ compile-fail has_concepts_fail.cpp ] ;
-test-suite "BOOST_HAS_DIRENT_H" :
-[ run has_dirent_h_pass.cpp ]
-[ compile-fail has_dirent_h_fail.cpp ] ;
-test-suite "BOOST_HAS_EXPM1" :
-[ run has_expm1_pass.cpp ]
-[ compile-fail has_expm1_fail.cpp ] ;
-test-suite "BOOST_HAS_FTIME" :
-[ run has_ftime_pass.cpp ]
-[ compile-fail has_ftime_fail.cpp ] ;
-test-suite "BOOST_HAS_GETTIMEOFDAY" :
-[ run has_gettimeofday_pass.cpp ]
-[ compile-fail has_gettimeofday_fail.cpp ] ;
-test-suite "BOOST_HAS_HASH" :
-[ run has_hash_pass.cpp ]
-[ compile-fail has_hash_fail.cpp ] ;
-test-suite "BOOST_HAS_LOG1P" :
-[ run has_log1p_pass.cpp ]
-[ compile-fail has_log1p_fail.cpp ] ;
-test-suite "BOOST_HAS_LONG_LONG" :
-[ run has_long_long_pass.cpp ]
-[ compile-fail has_long_long_fail.cpp ] ;
-test-suite "BOOST_HAS_MACRO_USE_FACET" :
-[ run has_macro_use_facet_pass.cpp ]
-[ compile-fail has_macro_use_facet_fail.cpp ] ;
-test-suite "BOOST_HAS_MS_INT64" :
-[ run has_ms_int64_pass.cpp ]
-[ compile-fail has_ms_int64_fail.cpp ] ;
-test-suite "BOOST_HAS_NANOSLEEP" :
-[ run has_nanosleep_pass.cpp ]
-[ compile-fail has_nanosleep_fail.cpp ] ;
-test-suite "BOOST_HAS_NL_TYPES_H" :
-[ run has_nl_types_h_pass.cpp ]
-[ compile-fail has_nl_types_h_fail.cpp ] ;
-test-suite "BOOST_HAS_NRVO" :
-[ run has_nrvo_pass.cpp ]
-[ compile-fail has_nrvo_fail.cpp ] ;
-test-suite "BOOST_HAS_PARTIAL_STD_ALLOCATOR" :
-[ run has_part_alloc_pass.cpp ]
-[ compile-fail has_part_alloc_fail.cpp ] ;
-test-suite "BOOST_HAS_PTHREADS" :
-[ run has_pthreads_pass.cpp ]
-[ compile-fail has_pthreads_fail.cpp ] ;
-test-suite "BOOST_HAS_PTHREAD_DELAY_NP" :
-[ run has_pthread_delay_np_pass.cpp ]
-[ compile-fail has_pthread_delay_np_fail.cpp ] ;
-test-suite "BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE" :
-[ run has_pthread_ma_st_pass.cpp ]
-[ compile-fail has_pthread_ma_st_fail.cpp ] ;
-test-suite "BOOST_HAS_PTHREAD_YIELD" :
-[ run has_pthread_yield_pass.cpp ]
-[ compile-fail has_pthread_yield_fail.cpp ] ;
-test-suite "BOOST_HAS_RVALUE_REFS" :
-[ run has_rvalue_refs_pass.cpp ]
-[ compile-fail has_rvalue_refs_fail.cpp ] ;
-test-suite "BOOST_HAS_SCHED_YIELD" :
-[ run has_sched_yield_pass.cpp ]
-[ compile-fail has_sched_yield_fail.cpp ] ;
-test-suite "BOOST_HAS_SGI_TYPE_TRAITS" :
-[ run has_sgi_type_traits_pass.cpp ]
-[ compile-fail has_sgi_type_traits_fail.cpp ] ;
-test-suite "BOOST_HAS_SIGACTION" :
-[ run has_sigaction_pass.cpp ]
-[ compile-fail has_sigaction_fail.cpp ] ;
-test-suite "BOOST_HAS_SLIST" :
-[ run has_slist_pass.cpp ]
-[ compile-fail has_slist_fail.cpp ] ;
-test-suite "BOOST_HAS_STATIC_ASSERT" :
-[ run has_static_assert_pass.cpp ]
-[ compile-fail has_static_assert_fail.cpp ] ;
-test-suite "BOOST_HAS_STDINT_H" :
-[ run has_stdint_h_pass.cpp ]
-[ compile-fail has_stdint_h_fail.cpp ] ;
-test-suite "BOOST_HAS_STLP_USE_FACET" :
-[ run has_stlp_use_facet_pass.cpp ]
-[ compile-fail has_stlp_use_facet_fail.cpp ] ;
-test-suite "BOOST_HAS_TR1_ARRAY" :
-[ run has_tr1_array_pass.cpp ]
-[ compile-fail has_tr1_array_fail.cpp ] ;
-test-suite "BOOST_HAS_TR1_BIND" :
-[ run has_tr1_bind_pass.cpp ]
-[ compile-fail has_tr1_bind_fail.cpp ] ;
-test-suite "BOOST_HAS_TR1_COMPLEX_OVERLOADS" :
-[ run has_tr1_complex_over_pass.cpp ]
-[ compile-fail has_tr1_complex_over_fail.cpp ] ;
-test-suite "BOOST_HAS_TR1_COMPLEX_INVERSE_TRIG" :
-[ run has_tr1_complex_trig_pass.cpp ]
-[ compile-fail has_tr1_complex_trig_fail.cpp ] ;
-test-suite "BOOST_HAS_TR1_FUNCTION" :
-[ run has_tr1_function_pass.cpp ]
-[ compile-fail has_tr1_function_fail.cpp ] ;
-test-suite "BOOST_HAS_TR1_HASH" :
-[ run has_tr1_hash_pass.cpp ]
-[ compile-fail has_tr1_hash_fail.cpp ] ;
-test-suite "BOOST_HAS_TR1_MEM_FN" :
-[ run has_tr1_mem_fn_pass.cpp ]
-[ compile-fail has_tr1_mem_fn_fail.cpp ] ;
-test-suite "BOOST_HAS_TR1_RANDOM" :
-[ run has_tr1_random_pass.cpp ]
-[ compile-fail has_tr1_random_fail.cpp ] ;
-test-suite "BOOST_HAS_TR1_REFERENCE_WRAPPER" :
-[ run has_tr1_ref_wrap_pass.cpp ]
-[ compile-fail has_tr1_ref_wrap_fail.cpp ] ;
-test-suite "BOOST_HAS_TR1_REGEX" :
-[ run has_tr1_regex_pass.cpp ]
-[ compile-fail has_tr1_regex_fail.cpp ] ;
-test-suite "BOOST_HAS_TR1_RESULT_OF" :
-[ run has_tr1_result_of_pass.cpp ]
-[ compile-fail has_tr1_result_of_fail.cpp ] ;
-test-suite "BOOST_HAS_TR1_SHARED_PTR" :
-[ run has_tr1_shared_ptr_pass.cpp ]
-[ compile-fail has_tr1_shared_ptr_fail.cpp ] ;
-test-suite "BOOST_HAS_TR1_TUPLE" :
-[ run has_tr1_tuple_pass.cpp ]
-[ compile-fail has_tr1_tuple_fail.cpp ] ;
-test-suite "BOOST_HAS_TR1_TYPE_TRAITS" :
-[ run has_tr1_type_traits_pass.cpp ]
-[ compile-fail has_tr1_type_traits_fail.cpp ] ;
-test-suite "BOOST_HAS_TR1_UNORDERED_MAP" :
-[ run has_tr1_unordered_map_pass.cpp ]
-[ compile-fail has_tr1_unordered_map_fail.cpp ] ;
-test-suite "BOOST_HAS_TR1_UNORDERED_SET" :
-[ run has_tr1_unordered_set_pass.cpp ]
-[ compile-fail has_tr1_unordered_set_fail.cpp ] ;
-test-suite "BOOST_HAS_TR1_UTILITY" :
-[ run has_tr1_utility_pass.cpp ]
-[ compile-fail has_tr1_utility_fail.cpp ] ;
-test-suite "BOOST_HAS_UNISTD_H" :
-[ run has_unistd_h_pass.cpp ]
-[ compile-fail has_unistd_h_fail.cpp ] ;
-test-suite "BOOST_HAS_VARIADIC_TMPL" :
-[ run has_variadic_tmpl_pass.cpp ]
-[ compile-fail has_variadic_tmpl_fail.cpp ] ;
-test-suite "BOOST_MSVC6_MEMBER_TEMPLATES" :
-[ run has_vc6_mem_templ_pass.cpp ]
-[ compile-fail has_vc6_mem_templ_fail.cpp ] ;
-test-suite "BOOST_MSVC_STD_ITERATOR" :
-[ run has_vc_iterator_pass.cpp ]
-[ compile-fail has_vc_iterator_fail.cpp ] ;
-test-suite "BOOST_HAS_WINTHREADS" :
-[ run has_winthreads_pass.cpp ]
-[ compile-fail has_winthreads_fail.cpp ] ;
-test-suite "BOOST_NO_ADL_BARRIER" :
-[ run no_adl_barrier_pass.cpp ]
-[ compile-fail no_adl_barrier_fail.cpp ] ;
-test-suite "BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP" :
-[ run no_arg_dep_lookup_pass.cpp ]
-[ compile-fail no_arg_dep_lookup_fail.cpp ] ;
-test-suite "BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS" :
-[ run no_array_type_spec_pass.cpp ]
-[ compile-fail no_array_type_spec_fail.cpp ] ;
-test-suite "BOOST_NO_AUTO_PTR" :
-[ run no_auto_ptr_pass.cpp ]
-[ compile-fail no_auto_ptr_fail.cpp ] ;
-test-suite "BOOST_BCB_PARTIAL_SPECIALIZATION_BUG" :
-[ run no_bcb_partial_spec_pass.cpp ]
-[ compile-fail no_bcb_partial_spec_fail.cpp ] ;
-test-suite "BOOST_NO_CTYPE_FUNCTIONS" :
-[ run no_ctype_functions_pass.cpp ]
-[ compile-fail no_ctype_functions_fail.cpp ] ;
-test-suite "BOOST_NO_CV_SPECIALIZATIONS" :
-[ run no_cv_spec_pass.cpp ]
-[ compile-fail no_cv_spec_fail.cpp ] ;
-test-suite "BOOST_NO_CV_VOID_SPECIALIZATIONS" :
-[ run no_cv_void_spec_pass.cpp ]
-[ compile-fail no_cv_void_spec_fail.cpp ] ;
-test-suite "BOOST_NO_CWCHAR" :
-[ run no_cwchar_pass.cpp ]
-[ compile-fail no_cwchar_fail.cpp ] ;
-test-suite "BOOST_NO_CWCTYPE" :
-[ run no_cwctype_pass.cpp ]
-[ compile-fail no_cwctype_fail.cpp ] ;
-test-suite "BOOST_DEDUCED_TYPENAME" :
-[ run no_ded_typename_pass.cpp ]
-[ compile-fail no_ded_typename_fail.cpp ] ;
-test-suite "BOOST_NO_DEPENDENT_NESTED_DERIVATIONS" :
-[ run no_dep_nested_class_pass.cpp ]
-[ compile-fail no_dep_nested_class_fail.cpp ] ;
-test-suite "BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS" :
-[ run no_dep_val_param_pass.cpp ]
-[ compile-fail no_dep_val_param_fail.cpp ] ;
-test-suite "BOOST_NO_EXCEPTIONS" :
-[ run no_exceptions_pass.cpp ]
-[ compile-fail no_exceptions_fail.cpp ] ;
-test-suite "BOOST_NO_EXCEPTION_STD_NAMESPACE" :
-[ run no_excep_std_pass.cpp ]
-[ compile-fail no_excep_std_fail.cpp ] ;
-test-suite "BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS" :
-[ run no_exp_func_tem_arg_pass.cpp ]
-[ compile-fail no_exp_func_tem_arg_fail.cpp ] ;
-test-suite "BOOST_NO_FUNCTION_TYPE_SPECIALIZATIONS" :
-[ run no_function_type_spec_pass.cpp ]
-[ compile-fail no_function_type_spec_fail.cpp ] ;
-test-suite "BOOST_NO_FUNCTION_TEMPLATE_ORDERING" :
-[ run no_func_tmp_order_pass.cpp ]
-[ compile-fail no_func_tmp_order_fail.cpp ] ;
-test-suite "BOOST_NO_MS_INT64_NUMERIC_LIMITS" :
-[ run no_i64_limits_pass.cpp ]
-[ compile-fail no_i64_limits_fail.cpp ] ;
-test-suite "BOOST_NO_INCLASS_MEMBER_INITIALIZATION" :
-[ run no_inline_memb_init_pass.cpp ]
-[ compile-fail no_inline_memb_init_fail.cpp ] ;
-test-suite "BOOST_NO_INTEGRAL_INT64_T" :
-[ run no_integral_int64_t_pass.cpp ]
-[ compile-fail no_integral_int64_t_fail.cpp ] ;
-test-suite "BOOST_NO_IOSFWD" :
-[ run no_iosfwd_pass.cpp ]
-[ compile-fail no_iosfwd_fail.cpp ] ;
-test-suite "BOOST_NO_IOSTREAM" :
-[ run no_iostream_pass.cpp ]
-[ compile-fail no_iostream_fail.cpp ] ;
-test-suite "BOOST_NO_IS_ABSTRACT" :
-[ run no_is_abstract_pass.cpp ]
-[ compile-fail no_is_abstract_fail.cpp ] ;
-test-suite "BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS" :
-[ run no_iter_construct_pass.cpp ]
-[ compile-fail no_iter_construct_fail.cpp ] ;
-test-suite "BOOST_NO_LIMITS" :
-[ run no_limits_pass.cpp ]
-[ compile-fail no_limits_fail.cpp ] ;
-test-suite "BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS" :
-[ run no_limits_const_exp_pass.cpp ]
-[ compile-fail no_limits_const_exp_fail.cpp ] ;
-test-suite "BOOST_NO_LONG_LONG_NUMERIC_LIMITS" :
-[ run no_ll_limits_pass.cpp ]
-[ compile-fail no_ll_limits_fail.cpp ] ;
-test-suite "BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS" :
-[ run no_mem_func_spec_pass.cpp ]
-[ compile-fail no_mem_func_spec_fail.cpp ] ;
-test-suite "BOOST_NO_MEMBER_TEMPLATES" :
-[ run no_mem_templates_pass.cpp ]
-[ compile-fail no_mem_templates_fail.cpp ] ;
-test-suite "BOOST_NO_MEMBER_TEMPLATE_FRIENDS" :
-[ run no_mem_templ_frnds_pass.cpp ]
-[ compile-fail no_mem_templ_frnds_fail.cpp ] ;
-test-suite "BOOST_NO_MEMBER_TEMPLATE_KEYWORD" :
-[ run no_mem_tem_keyword_pass.cpp ]
-[ compile-fail no_mem_tem_keyword_fail.cpp ] ;
-test-suite "BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS" :
-[ run no_mem_tem_pnts_pass.cpp ]
-[ compile-fail no_mem_tem_pnts_fail.cpp ] ;
-test-suite "BOOST_NO_OPERATORS_IN_NAMESPACE" :
-[ run no_ops_in_namespace_pass.cpp ]
-[ compile-fail no_ops_in_namespace_fail.cpp ] ;
-test-suite "BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION" :
-[ run no_partial_spec_pass.cpp ]
-[ compile-fail no_partial_spec_fail.cpp ] ;
-test-suite "BOOST_NO_PRIVATE_IN_AGGREGATE" :
-[ run no_priv_aggregate_pass.cpp ]
-[ compile-fail no_priv_aggregate_fail.cpp ] ;
-test-suite "BOOST_NO_POINTER_TO_MEMBER_CONST" :
-[ run no_ptr_mem_const_pass.cpp ]
-[ compile-fail no_ptr_mem_const_fail.cpp ] ;
-test-suite "BOOST_NO_UNREACHABLE_RETURN_DETECTION" :
-[ run no_ret_det_pass.cpp ]
-[ compile-fail no_ret_det_fail.cpp ] ;
-test-suite "BOOST_NO_SFINAE" :
-[ run no_sfinae_pass.cpp ]
-[ compile-fail no_sfinae_fail.cpp ] ;
-test-suite "BOOST_NO_STRINGSTREAM" :
-[ run no_sstream_pass.cpp ]
-[ compile-fail no_sstream_fail.cpp ] ;
-test-suite "BOOST_NO_STDC_NAMESPACE" :
-[ run no_stdc_namespace_pass.cpp ]
-[ compile-fail no_stdc_namespace_fail.cpp ] ;
-test-suite "BOOST_NO_STD_ALLOCATOR" :
-[ run no_std_allocator_pass.cpp ]
-[ compile-fail no_std_allocator_fail.cpp ] ;
-test-suite "BOOST_NO_STD_DISTANCE" :
-[ run no_std_distance_pass.cpp ]
-[ compile-fail no_std_distance_fail.cpp ] ;
-test-suite "BOOST_NO_STD_ITERATOR" :
-[ run no_std_iterator_pass.cpp ]
-[ compile-fail no_std_iterator_fail.cpp ] ;
-test-suite "BOOST_NO_STD_ITERATOR_TRAITS" :
-[ run no_std_iter_traits_pass.cpp ]
-[ compile-fail no_std_iter_traits_fail.cpp ] ;
-test-suite "BOOST_NO_STD_LOCALE" :
-[ run no_std_locale_pass.cpp ]
-[ compile-fail no_std_locale_fail.cpp ] ;
-test-suite "BOOST_NO_STD_MESSAGES" :
-[ run no_std_messages_pass.cpp ]
-[ compile-fail no_std_messages_fail.cpp ] ;
-test-suite "BOOST_NO_STD_MIN_MAX" :
-[ run no_std_min_max_pass.cpp ]
-[ compile-fail no_std_min_max_fail.cpp ] ;
-test-suite "BOOST_NO_STD_OUTPUT_ITERATOR_ASSIGN" :
-[ run no_std_oi_assign_pass.cpp ]
-[ compile-fail no_std_oi_assign_fail.cpp ] ;
-test-suite "BOOST_NO_STD_TYPEINFO" :
-[ run no_std_typeinfo_pass.cpp ]
-[ compile-fail no_std_typeinfo_fail.cpp ] ;
-test-suite "BOOST_NO_STD_USE_FACET" :
-[ run no_std_use_facet_pass.cpp ]
-[ compile-fail no_std_use_facet_fail.cpp ] ;
-test-suite "BOOST_NO_STD_WSTREAMBUF" :
-[ run no_std_wstreambuf_pass.cpp ]
-[ compile-fail no_std_wstreambuf_fail.cpp ] ;
-test-suite "BOOST_NO_STD_WSTRING" :
-[ run no_std_wstring_pass.cpp ]
-[ compile-fail no_std_wstring_fail.cpp ] ;
-test-suite "BOOST_NO_SWPRINTF" :
-[ run no_swprintf_pass.cpp ]
-[ compile-fail no_swprintf_fail.cpp ] ;
-test-suite "BOOST_NO_TEMPLATE_TEMPLATES" :
-[ run no_template_template_pass.cpp ]
-[ compile-fail no_template_template_fail.cpp ] ;
-test-suite "BOOST_NO_TWO_PHASE_NAME_LOOKUP" :
-[ run no_two_phase_lookup_pass.cpp ]
-[ compile-fail no_two_phase_lookup_fail.cpp ] ;
-test-suite "BOOST_NO_TYPEID" :
-[ run no_typeid_pass.cpp ]
-[ compile-fail no_typeid_fail.cpp ] ;
-test-suite "BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL" :
-[ run no_using_breaks_adl_pass.cpp ]
-[ compile-fail no_using_breaks_adl_fail.cpp ] ;
-test-suite "BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE" :
-[ run no_using_decl_overld_pass.cpp ]
-[ compile-fail no_using_decl_overld_fail.cpp ] ;
-test-suite "BOOST_NO_USING_TEMPLATE" :
-[ run no_using_template_pass.cpp ]
-[ compile-fail no_using_template_fail.cpp ] ;
-test-suite "BOOST_NO_VOID_RETURNS" :
-[ run no_void_returns_pass.cpp ]
-[ compile-fail no_void_returns_fail.cpp ] ;
-test-suite "BOOST_NO_INTRINSIC_WCHAR_T" :
-[ run no_wchar_t_pass.cpp ]
-[ compile-fail no_wchar_t_fail.cpp ] ;
-
+test-suite config
+ :
+ [ run config_test.cpp
+ : #args
+ : #input-files
+ : #requirements
+ <threading>multi
+ : config_test_threaded
+ ]
+ [ run config_test.cpp
+ : #args
+ : #input-files
+ : #requirements
+ <threading>single <toolset>msvc:<runtime-link>static <toolset>msvc:<link>static
+ ]
+ [ run config_info.cpp : : : <test-info>always_show_run_output <threading>single <toolset>msvc:<runtime-link>static <toolset>msvc:<link>static ]
+ [ run config_info.cpp : : : <test-info>always_show_run_output <threading>multi : config_info_threaded ]
+ [ run math_info.cpp : : : <test-info>always_show_run_output <toolset>borland:<runtime-link>static <toolset>borland:<link>static ]
+ [ run abi/abi_test.cpp abi/main.cpp ]
+ [ run limits_test.cpp ../../test/build//boost_test_exec_monitor ]
+ [ run link/main.cpp link//link_test
+ : #args
+ : #input-files
+ : #requirements
+ <runtime-link>shared
+ <define>BOOST_DYN_LINK=1
+ <define>BOOST_CONFIG_NO_LIB=1
+ :
+ config_link_test
+ ]
+ [ compile-fail threads/test_thread_fail1.cpp ]
+ [ compile-fail threads/test_thread_fail2.cpp ]
+ ;

Modified: branches/proto/v4/libs/config/test/config_info.cpp
==============================================================================
--- branches/proto/v4/libs/config/test/config_info.cpp (original)
+++ branches/proto/v4/libs/config/test/config_info.cpp 2008-04-14 18:16:44 EDT (Mon, 14 Apr 2008)
@@ -1024,6 +1024,10 @@
 
 
 
+
+
+
+
    // END GENERATED BLOCK
 
    PRINT_MACRO(BOOST_INTEL);

Modified: branches/proto/v4/libs/config/test/config_test.cpp
==============================================================================
--- branches/proto/v4/libs/config/test/config_test.cpp (original)
+++ branches/proto/v4/libs/config/test/config_test.cpp 2008-04-14 18:16:44 EDT (Mon, 14 Apr 2008)
@@ -1,4 +1,4 @@
-// This file was automatically generated on Wed Apr 09 16:30:14 2008
+// This file was automatically generated on Mon Apr 14 17:10:09 2008
 // by libs/config/tools/generate.cpp
 // Copyright John Maddock 2002-4.
 // Use, modification and distribution are subject to the

Deleted: branches/proto/v4/libs/config/test/options.jam
==============================================================================
--- branches/proto/v4/libs/config/test/options.jam 2008-04-14 18:16:44 EDT (Mon, 14 Apr 2008)
+++ (empty file)
@@ -1,26 +0,0 @@
-# copyright John Maddock 2003
-# Use, modification and distribution are 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)
-
-#
-# this template defines the options common to
-# all config builds and tests:
-#
-template config_options
- : # sources
- : # requirements
- <sysinclude>$(BOOST_ROOT)
- # como requires access to <windows.h>:
- <como-win32><*><no-warn>
- # threading tests require thread support turned on:
- <threading>multi
- ;
-
-template config_test_options
- : # sources
- <lib>../../test/build/boost_test_exec_monitor
- <template>config_options
- ;
-
-

Deleted: branches/proto/v4/libs/config/test/options_v2.jam
==============================================================================
--- branches/proto/v4/libs/config/test/options_v2.jam 2008-04-14 18:16:44 EDT (Mon, 14 Apr 2008)
+++ (empty file)
@@ -1,12 +0,0 @@
-# copyright John Maddock 2003
-# Use, modification and distribution are 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)
-
-project
- : requirements
- # threading tests require thread support turned on:
- <threading>multi
- ;
-
-local test-requirements = <library>../../test/build//boost_test_exec_monitor ;

Modified: branches/proto/v4/libs/config/tools/generate.cpp
==============================================================================
--- branches/proto/v4/libs/config/tools/generate.cpp (original)
+++ branches/proto/v4/libs/config/tools/generate.cpp 2008-04-14 18:16:44 EDT (Mon, 14 Apr 2008)
@@ -89,33 +89,9 @@
    ofs << "int main( int, char *[] )\n{\n" << config_test2.str() << " return error_count;\n}\n\n";
 }
 
-void write_jamfile()
-{
- fs::ofstream ofs(config_path / "Jamfile");
- time_t t = std::time(0);
- ofs << "#\n# Regression test Jamfile for boost configuration setup.\n# *** DO NOT EDIT THIS FILE BY HAND ***\n"
- "# This file was automatically generated on " << std::ctime(&t);
- ofs << "# by libs/config/tools/generate.cpp\n"
- "# Copyright John Maddock.\n"
- "# Use, modification and distribution are subject to the \n"
- "# Boost Software License, Version 1.0. (See accompanying file \n"
- "# LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)\n"
- "#\n# If you need to alter build preferences then set them in\n"
- "# the template defined in options.jam.\n#\n"
- "subproject libs/config/test ;\n"
- "# bring in the rules for testing\n"
- "import testing ./options ;\n\n"
- "run config_info.cpp <template>config_options ;\n"
- "run math_info.cpp <template>config_options : : : <borland><*><runtime-link>static ;\n"
- "run config_test.cpp <template>config_options ;\n"
- "run limits_test.cpp <template>config_test_options ;\n"
- "run abi/abi_test.cpp abi/main.cpp <template>config_options ;\n\n";
- ofs << jamfile.str() << std::endl;
-}
-
 void write_jamfile_v2()
 {
- fs::ofstream ofs(config_path / "Jamfile.v2");
+ fs::ofstream ofs(config_path / "all" / "Jamfile.v2");
    time_t t = std::time(0);
    ofs << "#\n# Regression test Jamfile for boost configuration setup.\n# *** DO NOT EDIT THIS FILE BY HAND ***\n"
       "# This file was automatically generated on " << std::ctime(&t);
@@ -128,13 +104,13 @@
       "# the template defined in options_v2.jam.\n#\n"
       "path-constant DOT : . ;\n"
       "include $(DOT)/options_v2.jam ;\n\n"
- "run config_info.cpp : : : <threading>single <toolset>msvc:<runtime-link>static <toolset>msvc:<link>static ;\n"
- "run config_info.cpp : : : <threading>multi : config_info_threaded ;\n"
- "run math_info.cpp : : : <toolset>borland:<runtime-link>static <toolset>borland:<link>static ;\n"
- "run config_test.cpp : : : <threading>single <toolset>msvc:<runtime-link>static <toolset>msvc:<link>static ;\n"
- "run config_test.cpp : : : <threading>multi : config_test_threaded ;\n"
- "run limits_test.cpp ../../test/build//boost_test_exec_monitor ;\n"
- "run abi/abi_test.cpp abi/main.cpp ;\n\n";
+ "run ../config_info.cpp : : : <threading>single <toolset>msvc:<runtime-link>static <toolset>msvc:<link>static ;\n"
+ "run ../config_info.cpp : : : <threading>multi : config_info_threaded ;\n"
+ "run ../math_info.cpp : : : <toolset>borland:<runtime-link>static <toolset>borland:<link>static ;\n"
+ "run ../config_test.cpp : : : <threading>single <toolset>msvc:<runtime-link>static <toolset>msvc:<link>static ;\n"
+ "run ../config_test.cpp : : : <threading>multi : config_test_threaded ;\n"
+ "run ../limits_test.cpp ../../../test/build//boost_test_exec_monitor ;\n"
+ "run ../abi/abi_test.cpp ../abi/main.cpp ;\n\n";
    ofs << jamfile_v2.str() << std::endl;
 
 }
@@ -265,8 +241,8 @@
       "[ compile-fail " << negative_file.leaf() << " <template>config_options ] ;\n";
 
    jamfile_v2 << "test-suite \"" << macro_name << "\" : \n"
- "[ run " << positive_file.leaf() << " ]\n"
- "[ compile-fail " << negative_file.leaf() << " ] ;\n";
+ "[ run ../" << positive_file.leaf() << " ]\n"
+ "[ compile-fail ../" << negative_file.leaf() << " ] ;\n";
 
 }
 
@@ -301,7 +277,6 @@
       ++i;
    }
    write_config_test();
- write_jamfile();
    write_jamfile_v2();
    write_config_info();
    return 0;

Modified: branches/proto/v4/libs/functional/hash/doc/Jamfile.v2
==============================================================================
--- branches/proto/v4/libs/functional/hash/doc/Jamfile.v2 (original)
+++ branches/proto/v4/libs/functional/hash/doc/Jamfile.v2 2008-04-14 18:16:44 EDT (Mon, 14 Apr 2008)
@@ -5,9 +5,9 @@
 
 xml hash : hash.qbk ;
 boostbook standalone : hash :
- <xsl:param>boost.root=../../../../..
- <xsl:param>boost.libraries=../../../../libraries.htm
- <xsl:param>html.stylesheet=../../../../../doc/html/boostbook.css
+ <xsl:param>admon.graphics.path=images/
+ <xsl:param>navig.graphics.path=images/
+ <xsl:param>html.stylesheet=boostbook.css
     <xsl:param>chunk.first.sections=1
     <xsl:param>chunk.section.depth=2
     <xsl:param>generate.section.toc.level=2

Modified: branches/proto/v4/libs/serialization/build/Jamfile.v2
==============================================================================
--- branches/proto/v4/libs/serialization/build/Jamfile.v2 (original)
+++ branches/proto/v4/libs/serialization/build/Jamfile.v2 2008-04-14 18:16:44 EDT (Mon, 14 Apr 2008)
@@ -8,7 +8,7 @@
 
 project boost/serialization
     : source-location ../src
- : requirements <dependency>../../config/test//BOOST_NO_STD_LOCALE
+ : requirements <dependency>../../config/test/all//BOOST_NO_STD_LOCALE
       <conditional>@include-spirit
 ;
 
@@ -100,7 +100,7 @@
     : $(WSOURCES).cpp boost_serialization
     :
     <toolset>msvc:<cxxflags>/Gy
- <dependency>../../config/test//BOOST_NO_STD_WSTREAMBUF
+ <dependency>../../config/test/all//BOOST_NO_STD_WSTREAMBUF
     <link>shared:<define>BOOST_SERIALIZATION_DYN_LINK=1
     ;
 

Modified: branches/proto/v4/libs/serialization/test/Jamfile.v2
==============================================================================
--- branches/proto/v4/libs/serialization/test/Jamfile.v2 (original)
+++ branches/proto/v4/libs/serialization/test/Jamfile.v2 2008-04-14 18:16:44 EDT (Mon, 14 Apr 2008)
@@ -84,11 +84,11 @@
         
         [ test-bsl-run-no-lib test_utf8_codecvt
             : ../src/utf8_codecvt_facet
- : <dependency>../../config/test//BOOST_NO_STD_WSTREAMBUF
+ : <dependency>../../config/test/all//BOOST_NO_STD_WSTREAMBUF
         ]
         [ test-bsl-run-no-lib test_codecvt_null
             : ../src/codecvt_null
- : <dependency>../../config/test//BOOST_NO_STD_WSTREAMBUF
+ : <dependency>../../config/test/all//BOOST_NO_STD_WSTREAMBUF
         ]
 
         # should fail compilation

Modified: branches/proto/v4/libs/serialization/util/test.jam
==============================================================================
--- branches/proto/v4/libs/serialization/util/test.jam (original)
+++ branches/proto/v4/libs/serialization/util/test.jam 2008-04-14 18:16:44 EDT (Mon, 14 Apr 2008)
@@ -94,7 +94,7 @@
             # both stlport and msvc6 define iswspace
             <toolset>msvc,<stdlib>stlport:<linkflags>"-force:multiple"
             <dependency>$(save-test)
- <dependency>../../config/test//BOOST_NO_STD_WSTREAMBUF
+ <dependency>../../config/test/all//BOOST_NO_STD_WSTREAMBUF
     ] ;
     return $(tests) ;
 }

Modified: branches/proto/v4/libs/thread/example/condition.cpp
==============================================================================
--- branches/proto/v4/libs/thread/example/condition.cpp (original)
+++ branches/proto/v4/libs/thread/example/condition.cpp 2008-04-14 18:16:44 EDT (Mon, 14 Apr 2008)
@@ -46,11 +46,16 @@
 
 bounded_buffer buf(2);
 
+boost::mutex io_mutex;
+
 void sender() {
     int n = 0;
     while (n < 100) {
         buf.send(n);
- std::cout << "sent: " << n << std::endl;
+ {
+ boost::mutex::scoped_lock io_lock(io_mutex);
+ std::cout << "sent: " << n << std::endl;
+ }
         ++n;
     }
     buf.send(-1);
@@ -60,7 +65,10 @@
     int n;
     do {
         n = buf.receive();
- std::cout << "received: " << n << std::endl;
+ {
+ boost::mutex::scoped_lock io_lock(io_mutex);
+ std::cout << "received: " << n << std::endl;
+ }
     } while (n != -1); // -1 indicates end of buffer
 }
 

Modified: branches/proto/v4/libs/unordered/doc/Jamfile.v2
==============================================================================
--- branches/proto/v4/libs/unordered/doc/Jamfile.v2 (original)
+++ branches/proto/v4/libs/unordered/doc/Jamfile.v2 2008-04-14 18:16:44 EDT (Mon, 14 Apr 2008)
@@ -5,9 +5,11 @@
 
 xml unordered : unordered.qbk ;
 boostbook standalone : unordered :
+ <xsl:param>admon.graphics.path=images/
+ <xsl:param>navig.graphics.path=images/
+ <xsl:param>html.stylesheet=boostbook.css
     <xsl:param>boost.root=../../../..
     <xsl:param>boost.libraries=../../../libraries.htm
- <xsl:param>html.stylesheet=../../../../doc/html/boostbook.css
     <xsl:param>chunk.first.sections=1
     <xsl:param>chunk.section.depth=2
     <xsl:param>generate.section.toc.level=2

Modified: branches/proto/v4/libs/unordered/doc/ref.xml
==============================================================================
--- branches/proto/v4/libs/unordered/doc/ref.xml (original)
+++ branches/proto/v4/libs/unordered/doc/ref.xml 2008-04-14 18:16:44 EDT (Mon, 14 Apr 2008)
@@ -2,20 +2,9 @@
 Copyright Daniel James 2006-2008
 Distributed under the Boost Software License, Version 1.0. (See accompanying
 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
--->
-
- <library-reference>
- <!--
- Header: <boost/unordered_set.hpp>
- -->
-
+--><library-reference>
     <header name="boost/unordered_set.hpp">
       <namespace name="boost">
-
- <!--
- boost::unordered_set
- -->
-
         <class name="unordered_set">
           <template>
             <template-type-parameter name="Value">
@@ -30,10 +19,11 @@
               <default><type>std::allocator&lt;Value&gt;</type></default>
             </template-type-parameter>
           </template>
- <purpose>An unordered associative container that stores unique values.
+ <purpose>
+ An unordered associative container that stores unique values.
           </purpose>
           <description>
- <para>For the normative reference see chapter 23 of
+ <para>For the normative reference see chapter 23 of
               <ulink url="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2461.pdf">the working draft of the C++ standard [n2461].</ulink></para>
             <para><emphasis role="bold">Template Parameters</emphasis>
               <informaltable>
@@ -48,7 +38,7 @@
                     <row>
                       <entry><emphasis>Pred</emphasis></entry>
                       <entry>A binary function object that implements an equivalence relation on values of type <code>Value</code>.
- A binary function object that induces an equivalence relation on values of type Key.
+ A binary function object that induces an equivalence relation on values of type Key.
                         It takes two arguments of type Key and returns a value of type bool.</entry></row>
                     <row>
                       <entry><emphasis>Alloc</emphasis></entry>
@@ -191,6 +181,25 @@
               <para>The copy constructor. Copies the contained elements, hash function, predicate, maximum load factor and allocator.</para>
             </description>
           </constructor>
+ <constructor>
+ <parameter name="a">
+ <paramtype>Allocator const&amp;</paramtype>
+ </parameter>
+ <description>
+ <para>Constructs an empty container, using allocator <code>a</code>.</para>
+ </description>
+ </constructor>
+ <constructor>
+ <parameter name="x">
+ <paramtype>unordered_set const&amp;</paramtype>
+ </parameter>
+ <parameter name="a">
+ <paramtype>Allocator const&amp;</paramtype>
+ </parameter>
+ <description>
+ <para>Constructs an container, copying <code>x</code>'s contained elements, hash function, predicate, maximum load factor, but using allocator <code>a</code>.</para>
+ </description>
+ </constructor>
           <destructor>
           </destructor>
           <method name="operator=">
@@ -391,7 +400,7 @@
                 <para>If the allocators are equal, doesn't throw an exception unless it is thrown by the copy constructor or copy assignment operator of <code>key_equal</code> or <code>hasher</code>.</para>
               </throws>
               <notes>
- <para>For a discussion of the behavior when allocators aren't equal see
+ <para>For a discussion of the behavior when allocators aren't equal see
                   <link linkend="unordered.rationale.swapping_containers_with_unequal_allocators">the implementation details</link>.</para>
               </notes>
             </method>
@@ -620,17 +629,12 @@
                 <para>If the allocators are equal, doesn't throw an exception unless it is thrown by the copy constructor or copy assignment operator of <code>Hash</code> or <code>Pred</code>.</para>
               </throws>
               <notes>
- <para>For a discussion of the behavior when allocators aren't equal see
+ <para>For a discussion of the behavior when allocators aren't equal see
                   <link linkend="unordered.rationale.swapping_containers_with_unequal_allocators">the implementation details</link>.</para>
               </notes>
             </function>
           </free-function-group>
         </class>
-
- <!--
- boost::unordered_multiset
- -->
-
         <class name="unordered_multiset">
           <template>
             <template-type-parameter name="Value">
@@ -645,10 +649,11 @@
               <default><type>std::allocator&lt;Value&gt;</type></default>
             </template-type-parameter>
           </template>
- <purpose>An unordered associative container that stores values. The same key can be stored multiple times.
+ <purpose>
+ An unordered associative container that stores values. The same key can be stored multiple times.
           </purpose>
           <description>
- <para>For the normative reference see chapter 23 of
+ <para>For the normative reference see chapter 23 of
               <ulink url="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2461.pdf">the working draft of the C++ standard [n2461].</ulink></para>
             <para><emphasis role="bold">Template Parameters</emphasis>
               <informaltable>
@@ -663,7 +668,7 @@
                     <row>
                       <entry><emphasis>Pred</emphasis></entry>
                       <entry>A binary function object that implements an equivalence relation on values of type <code>Value</code>.
- A binary function object that induces an equivalence relation on values of type Key.
+ A binary function object that induces an equivalence relation on values of type Key.
                         It takes two arguments of type Key and returns a value of type bool.</entry></row>
                     <row>
                       <entry><emphasis>Alloc</emphasis></entry>
@@ -806,6 +811,25 @@
               <para>The copy constructor. Copies the contained elements, hash function, predicate, maximum load factor and allocator.</para>
             </description>
           </constructor>
+ <constructor>
+ <parameter name="a">
+ <paramtype>Allocator const&amp;</paramtype>
+ </parameter>
+ <description>
+ <para>Constructs an empty container, using allocator <code>a</code>.</para>
+ </description>
+ </constructor>
+ <constructor>
+ <parameter name="x">
+ <paramtype>unordered_multiset const&amp;</paramtype>
+ </parameter>
+ <parameter name="a">
+ <paramtype>Allocator const&amp;</paramtype>
+ </parameter>
+ <description>
+ <para>Constructs an container, copying <code>x</code>'s contained elements, hash function, predicate, maximum load factor, but using allocator <code>a</code>.</para>
+ </description>
+ </constructor>
           <destructor>
           </destructor>
           <method name="operator=">
@@ -924,7 +948,7 @@
               </parameter>
               <type>void</type>
               <description>
- <para>Inserts a range of elements into the container. </para>
+ <para>Inserts a range of elements into the container.</para>
               </description>
               <throws>
                 <para>When inserting a single element, if an exception is thrown by an operation other than a call to <code>hasher</code> the function has no effect.</para>
@@ -1005,7 +1029,7 @@
                 <para>If the allocators are equal, doesn't throw an exception unless it is thrown by the copy constructor or copy assignment operator of <code>key_equal</code> or <code>hasher</code>.</para>
               </throws>
               <notes>
- <para>For a discussion of the behavior when allocators aren't equal see
+ <para>For a discussion of the behavior when allocators aren't equal see
                   <link linkend="unordered.rationale.swapping_containers_with_unequal_allocators">the implementation details</link>.</para>
               </notes>
             </method>
@@ -1234,7 +1258,7 @@
                 <para>If the allocators are equal, doesn't throw an exception unless it is thrown by the copy constructor or copy assignment operator of <code>Hash</code> or <code>Pred</code>.</para>
               </throws>
               <notes>
- <para>For a discussion of the behavior when allocators aren't equal see
+ <para>For a discussion of the behavior when allocators aren't equal see
                   <link linkend="unordered.rationale.swapping_containers_with_unequal_allocators">the implementation details</link>.</para>
               </notes>
             </function>
@@ -1242,17 +1266,8 @@
         </class>
       </namespace>
     </header>
- <!--
- Header: <boost/unordered_map.hpp>
- -->
-
     <header name="boost/unordered_map.hpp">
       <namespace name="boost">
-
- <!--
- boost::unordered_map
- -->
-
         <class name="unordered_map">
           <template>
             <template-type-parameter name="Key">
@@ -1260,19 +1275,20 @@
             <template-type-parameter name="Mapped">
             </template-type-parameter>
             <template-type-parameter name="Hash">
- <default><type>boost::hash&lt;Value&gt;</type></default>
+ <default><type>boost::hash&lt;Key&gt;</type></default>
             </template-type-parameter>
             <template-type-parameter name="Pred">
- <default><type>std::equal_to&lt;Value&gt;</type></default>
+ <default><type>std::equal_to&lt;Key&gt;</type></default>
             </template-type-parameter>
             <template-type-parameter name="Alloc">
- <default><type>std::allocator&lt;std::pair&lt;const Key, Mapped&gt; &gt;</type></default>
+ <default><type>std::allocator&lt;std::pair&lt;Key const, Mapped&gt; &gt;</type></default>
             </template-type-parameter>
           </template>
- <purpose>An unordered associative container that associates unique keys with another value.
+ <purpose>
+ An unordered associative container that associates unique keys with another value.
           </purpose>
           <description>
- <para>For the normative reference see chapter 23 of
+ <para>For the normative reference see chapter 23 of
               <ulink url="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2461.pdf">the working draft of the C++ standard [n2461].</ulink></para>
             <para><emphasis role="bold">Template Parameters</emphasis>
               <informaltable>
@@ -1290,7 +1306,7 @@
                     <row>
                       <entry><emphasis>Pred</emphasis></entry>
                       <entry>A binary function object that implements an equivalence relation on values of type <code>Key</code>.
- A binary function object that induces an equivalence relation on values of type Key.
+ A binary function object that induces an equivalence relation on values of type Key.
                         It takes two arguments of type Key and returns a value of type bool.</entry></row>
                     <row>
                       <entry><emphasis>Alloc</emphasis></entry>
@@ -1302,7 +1318,7 @@
             <type>Key</type>
           </typedef>
           <typedef name="value_type">
- <type>std::pair&lt;Key const, Value&gt;</type>
+ <type>std::pair&lt;Key const, Mapped&gt;</type>
           </typedef>
           <typedef name="mapped_type">
             <type>Mapped</type>
@@ -1436,6 +1452,25 @@
               <para>The copy constructor. Copies the contained elements, hash function, predicate, maximum load factor and allocator.</para>
             </description>
           </constructor>
+ <constructor>
+ <parameter name="a">
+ <paramtype>Allocator const&amp;</paramtype>
+ </parameter>
+ <description>
+ <para>Constructs an empty container, using allocator <code>a</code>.</para>
+ </description>
+ </constructor>
+ <constructor>
+ <parameter name="x">
+ <paramtype>unordered_map const&amp;</paramtype>
+ </parameter>
+ <parameter name="a">
+ <paramtype>Allocator const&amp;</paramtype>
+ </parameter>
+ <description>
+ <para>Constructs an container, copying <code>x</code>'s contained elements, hash function, predicate, maximum load factor, but using allocator <code>a</code>.</para>
+ </description>
+ </constructor>
           <destructor>
           </destructor>
           <method name="operator=">
@@ -1636,7 +1671,7 @@
                 <para>If the allocators are equal, doesn't throw an exception unless it is thrown by the copy constructor or copy assignment operator of <code>key_equal</code> or <code>hasher</code>.</para>
               </throws>
               <notes>
- <para>For a discussion of the behavior when allocators aren't equal see
+ <para>For a discussion of the behavior when allocators aren't equal see
                   <link linkend="unordered.rationale.swapping_containers_with_unequal_allocators">the implementation details</link>.</para>
               </notes>
             </method>
@@ -1731,7 +1766,7 @@
                 <para>An exception object of type <code>std::out_of_range</code> if no such element is present.</para>
               </throws>
               <notes>
- <para>This is not specified in the draft standard, but that is probably an oversight. The issue has been raised in
+ <para>This is not specified in the draft standard, but that is probably an oversight. The issue has been raised in
                   <ulink url="http://groups.google.com/group/comp.std.c++/browse_thread/thread/ab7c22a868fd370b">comp.std.c++</ulink>.</para>
               </notes>
             </overloaded-method>
@@ -1902,17 +1937,12 @@
                 <para>If the allocators are equal, doesn't throw an exception unless it is thrown by the copy constructor or copy assignment operator of <code>Hash</code> or <code>Pred</code>.</para>
               </throws>
               <notes>
- <para>For a discussion of the behavior when allocators aren't equal see
+ <para>For a discussion of the behavior when allocators aren't equal see
                   <link linkend="unordered.rationale.swapping_containers_with_unequal_allocators">the implementation details</link>.</para>
               </notes>
             </function>
           </free-function-group>
         </class>
-
- <!--
- boost::unordered_multimap
- -->
-
         <class name="unordered_multimap">
           <template>
             <template-type-parameter name="Key">
@@ -1920,19 +1950,20 @@
             <template-type-parameter name="Mapped">
             </template-type-parameter>
             <template-type-parameter name="Hash">
- <default><type>boost::hash&lt;Value&gt;</type></default>
+ <default><type>boost::hash&lt;Key&gt;</type></default>
             </template-type-parameter>
             <template-type-parameter name="Pred">
- <default><type>std::equal_to&lt;Value&gt;</type></default>
+ <default><type>std::equal_to&lt;Key&gt;</type></default>
             </template-type-parameter>
             <template-type-parameter name="Alloc">
- <default><type>std::allocator&lt;std::pair&lt;const Key, Mapped&gt; &gt;</type></default>
+ <default><type>std::allocator&lt;std::pair&lt;Key const, Mapped&gt; &gt;</type></default>
             </template-type-parameter>
           </template>
- <purpose>An unordered associative container that associates keys with another value. The same key can be stored multiple times.
+ <purpose>
+ An unordered associative container that associates keys with another value. The same key can be stored multiple times.
           </purpose>
           <description>
- <para>For the normative reference see chapter 23 of
+ <para>For the normative reference see chapter 23 of
               <ulink url="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2461.pdf">the working draft of the C++ standard [n2461].</ulink></para>
             <para><emphasis role="bold">Template Parameters</emphasis>
               <informaltable>
@@ -1950,7 +1981,7 @@
                     <row>
                       <entry><emphasis>Pred</emphasis></entry>
                       <entry>A binary function object that implements an equivalence relation on values of type <code>Key</code>.
- A binary function object that induces an equivalence relation on values of type Key.
+ A binary function object that induces an equivalence relation on values of type Key.
                         It takes two arguments of type Key and returns a value of type bool.</entry></row>
                     <row>
                       <entry><emphasis>Alloc</emphasis></entry>
@@ -1962,7 +1993,7 @@
             <type>Key</type>
           </typedef>
           <typedef name="value_type">
- <type>std::pair&lt;Key const, Value&gt;</type>
+ <type>std::pair&lt;Key const, Mapped&gt;</type>
           </typedef>
           <typedef name="mapped_type">
             <type>Mapped</type>
@@ -2096,6 +2127,25 @@
               <para>The copy constructor. Copies the contained elements, hash function, predicate, maximum load factor and allocator.</para>
             </description>
           </constructor>
+ <constructor>
+ <parameter name="a">
+ <paramtype>Allocator const&amp;</paramtype>
+ </parameter>
+ <description>
+ <para>Constructs an empty container, using allocator <code>a</code>.</para>
+ </description>
+ </constructor>
+ <constructor>
+ <parameter name="x">
+ <paramtype>unordered_multimap const&amp;</paramtype>
+ </parameter>
+ <parameter name="a">
+ <paramtype>Allocator const&amp;</paramtype>
+ </parameter>
+ <description>
+ <para>Constructs an container, copying <code>x</code>'s contained elements, hash function, predicate, maximum load factor, but using allocator <code>a</code>.</para>
+ </description>
+ </constructor>
           <destructor>
           </destructor>
           <method name="operator=">
@@ -2214,7 +2264,7 @@
               </parameter>
               <type>void</type>
               <description>
- <para>Inserts a range of elements into the container. </para>
+ <para>Inserts a range of elements into the container.</para>
               </description>
               <throws>
                 <para>When inserting a single element, if an exception is thrown by an operation other than a call to <code>hasher</code> the function has no effect.</para>
@@ -2295,7 +2345,7 @@
                 <para>If the allocators are equal, doesn't throw an exception unless it is thrown by the copy constructor or copy assignment operator of <code>key_equal</code> or <code>hasher</code>.</para>
               </throws>
               <notes>
- <para>For a discussion of the behavior when allocators aren't equal see
+ <para>For a discussion of the behavior when allocators aren't equal see
                   <link linkend="unordered.rationale.swapping_containers_with_unequal_allocators">the implementation details</link>.</para>
               </notes>
             </method>
@@ -2526,7 +2576,7 @@
                 <para>If the allocators are equal, doesn't throw an exception unless it is thrown by the copy constructor or copy assignment operator of <code>Hash</code> or <code>Pred</code>.</para>
               </throws>
               <notes>
- <para>For a discussion of the behavior when allocators aren't equal see
+ <para>For a discussion of the behavior when allocators aren't equal see
                   <link linkend="unordered.rationale.swapping_containers_with_unequal_allocators">the implementation details</link>.</para>
               </notes>
             </function>
@@ -2534,4 +2584,4 @@
         </class>
       </namespace>
     </header>
- </library-reference>
+ </library-reference>
\ No newline at end of file

Modified: branches/proto/v4/libs/unordered/test/exception/constructor_exception_tests.cpp
==============================================================================
--- branches/proto/v4/libs/unordered/test/exception/constructor_exception_tests.cpp (original)
+++ branches/proto/v4/libs/unordered/test/exception/constructor_exception_tests.cpp 2008-04-14 18:16:44 EDT (Mon, 14 Apr 2008)
@@ -58,6 +58,14 @@
 };
 
 template <class T>
+struct construct_test6 : public objects, test::exception_base
+{
+ void run() const {
+ T x(allocator);
+ }
+};
+
+template <class T>
 struct range : public test::exception_base
 {
     test::random_values<T> values;
@@ -123,7 +131,7 @@
 };
 
 RUN_EXCEPTION_TESTS(
- (construct_test1)(construct_test2)(construct_test3)(construct_test4)(construct_test5)
+ (construct_test1)(construct_test2)(construct_test3)(construct_test4)(construct_test5)(construct_test6)
     (range_construct_test1)(range_construct_test2)(range_construct_test3)(range_construct_test4)(range_construct_test5)
     (input_range_construct_test),
     CONTAINER_SEQ)

Modified: branches/proto/v4/libs/unordered/test/exception/copy_exception_tests.cpp
==============================================================================
--- branches/proto/v4/libs/unordered/test/exception/copy_exception_tests.cpp (original)
+++ branches/proto/v4/libs/unordered/test/exception/copy_exception_tests.cpp 2008-04-14 18:16:44 EDT (Mon, 14 Apr 2008)
@@ -44,6 +44,20 @@
     }
 };
 
+template <class T>
+struct copy_with_allocator_test : public test::exception_base
+{
+ test::random_values<T> values;
+ T x;
+ test::exception::allocator<test::exception::object> allocator;
+
+ copy_with_allocator_test() : values(100), x(values.begin(), values.end()) {}
+
+ void run() const {
+ T y(x, allocator);
+ }
+};
+
 RUN_EXCEPTION_TESTS(
- (copy_test1)(copy_test2)(copy_test3),
+ (copy_test1)(copy_test2)(copy_test3)(copy_with_allocator_test),
     CONTAINER_SEQ)

Modified: branches/proto/v4/libs/unordered/test/helpers/allocator.hpp
==============================================================================
--- branches/proto/v4/libs/unordered/test/helpers/allocator.hpp (original)
+++ branches/proto/v4/libs/unordered/test/helpers/allocator.hpp 2008-04-14 18:16:44 EDT (Mon, 14 Apr 2008)
@@ -70,7 +70,7 @@
             using namespace std;
             T* ptr = static_cast<T*>(malloc(n * sizeof(char)));
             if(!ptr) throw std::bad_alloc();
- return ptr;
+ return (char*) ptr;
         }
 #endif
     };

Modified: branches/proto/v4/libs/unordered/test/helpers/exception_test.hpp
==============================================================================
--- branches/proto/v4/libs/unordered/test/helpers/exception_test.hpp (original)
+++ branches/proto/v4/libs/unordered/test/helpers/exception_test.hpp 2008-04-14 18:16:44 EDT (Mon, 14 Apr 2008)
@@ -163,6 +163,7 @@
         test_runner(Test const& t) : test_(t) {}
         void operator()() const {
             DISABLE_EXCEPTIONS;
+ test::scope = "";
             BOOST_DEDUCED_TYPENAME Test::data_type x(test_.init());
             BOOST_DEDUCED_TYPENAME Test::strong_type strong;
             strong.store(x);
@@ -223,9 +224,15 @@
                     success = true;
                 }
                 catch(test_failure) {
+ BOOST_ERROR("test_failure caught.");
                     break;
                 }
+ catch(test_exception) {
+ continue;
+ }
                 catch(...) {
+ BOOST_ERROR("Unexpected exception.");
+ break;
                 }
             } while(!success);
         }

Modified: branches/proto/v4/libs/unordered/test/unordered/Jamfile.v2
==============================================================================
--- branches/proto/v4/libs/unordered/test/unordered/Jamfile.v2 (original)
+++ branches/proto/v4/libs/unordered/test/unordered/Jamfile.v2 2008-04-14 18:16:44 EDT (Mon, 14 Apr 2008)
@@ -9,7 +9,7 @@
     : requirements
         <toolset>intel-linux:"<cxxflags>-strict_ansi -cxxlib-icc"
         <toolset>gcc:<cxxflags>-Wsign-promo
- <toolset>msvc:<cxxflags>/W4
+ #<toolset>msvc:<cxxflags>/W4
     ;
 
 test-suite unordered

Modified: branches/proto/v4/libs/unordered/test/unordered/constructor_tests.cpp
==============================================================================
--- branches/proto/v4/libs/unordered/test/unordered/constructor_tests.cpp (original)
+++ branches/proto/v4/libs/unordered/test/unordered/constructor_tests.cpp 2008-04-14 18:16:44 EDT (Mon, 14 Apr 2008)
@@ -136,6 +136,17 @@
         test::check_container(x, v);
         test::check_equivalent_keys(x);
     }
+
+ std::cerr<<"Construct 11\n";
+ {
+ test::random_values<T> v(1000, generator);
+ T x(al);
+ BOOST_TEST(x.empty());
+ BOOST_TEST(test::equivalent(x.hash_function(), hf));
+ BOOST_TEST(test::equivalent(x.key_eq(), eq));
+ BOOST_TEST(test::equivalent(x.get_allocator(), al));
+ test::check_equivalent_keys(x);
+ }
 }
 
 template <class T>

Modified: branches/proto/v4/libs/unordered/test/unordered/copy_tests.cpp
==============================================================================
--- branches/proto/v4/libs/unordered/test/unordered/copy_tests.cpp (original)
+++ branches/proto/v4/libs/unordered/test/unordered/copy_tests.cpp 2008-04-14 18:16:44 EDT (Mon, 14 Apr 2008)
@@ -70,6 +70,7 @@
     BOOST_DEDUCED_TYPENAME T::hasher hf(1);
     BOOST_DEDUCED_TYPENAME T::key_equal eq(1);
     BOOST_DEDUCED_TYPENAME T::allocator_type al(1);
+ BOOST_DEDUCED_TYPENAME T::allocator_type al2(2);
 
     {
         T x(10000, hf, eq, al);
@@ -83,6 +84,17 @@
     }
 
     {
+ T x(1000, hf, eq, al);
+ T y(x, al2);
+ BOOST_TEST(y.empty());
+ BOOST_TEST(test::equivalent(y.hash_function(), hf));
+ BOOST_TEST(test::equivalent(y.key_eq(), eq));
+ BOOST_TEST(test::equivalent(y.get_allocator(), al2));
+ BOOST_TEST(x.max_load_factor() == y.max_load_factor());
+ test::check_equivalent_keys(y);
+ }
+
+ {
         test::random_values<T> v(1000);
 
         T x(v.begin(), v.end(), 0, hf, eq, al);
@@ -90,6 +102,18 @@
         test::unordered_equivalence_tester<T> equivalent(x);
         equivalent(y);
         test::check_equivalent_keys(y);
+ BOOST_TEST(test::equivalent(y.get_allocator(), al));
+ }
+
+ {
+ test::random_values<T> v(500);
+
+ T x(v.begin(), v.end(), 0, hf, eq, al);
+ T y(x, al2);
+ test::unordered_equivalence_tester<T> equivalent(x);
+ equivalent(y);
+ test::check_equivalent_keys(y);
+ BOOST_TEST(test::equivalent(y.get_allocator(), al2));
     }
 }
 

Modified: branches/proto/v4/status/Jamfile.v2
==============================================================================
--- branches/proto/v4/status/Jamfile.v2 (original)
+++ branches/proto/v4/status/Jamfile.v2 2008-04-14 18:16:44 EDT (Mon, 14 Apr 2008)
@@ -32,6 +32,7 @@
 build-project ../libs/bind/test ; # test-suite bind
 build-project ../libs/circular_buffer/test ; # test-suite circular_buffer
 build-project ../libs/concept_check ; # test-suite concept_check
+build-project ../libs/config/test ; # test-suite config
 build-project ../libs/conversion/test ; # test-suite conversion
 build-project ../libs/crc/test ; # test-suite crc
 build-project ../libs/date_time/test ; # test-suite date_time
@@ -103,50 +104,3 @@
 build-project ../libs/wave/test/build ; # test-suite wave
 build-project ../libs/xpressive/test ; # test-suite xpressive
 
-# Tests specified in this Jamfile
-
-alias test_exec_monitor : ../libs/test/build//boost_test_exec_monitor/<link>static ;
-explicit test_exec_monitor ;
-alias unit_test_framework : ../libs/test/build//boost_unit_test_framework/<link>static ;
-explicit unit_test_framework ;
-
- test-suite config
- :
- # FIXME: Ideally, this should be just an alias to 'main' test suite
- # defined in libs/config/test/Jamfile.v2
- # That way, we'll avoid code duplication and won't run additional
- # tests in 'auxilliary' test suites, that need to be run and
- # interpreted by humans.
- # But such change will require tweaking libs/config/tools/generate.cpp
- # so postponing to later.
- [ run libs/config/test/config_test.cpp
- : #args
- : #input-files
- : #requirements
- <threading>multi
- : config_test_threaded
- ]
- [ run libs/config/test/config_test.cpp
- : #args
- : #input-files
- : #requirements
- <threading>single <toolset>msvc:<runtime-link>static <toolset>msvc:<link>static
- ]
- [ run libs/config/test/config_info.cpp : : : <test-info>always_show_run_output <threading>single <toolset>msvc:<runtime-link>static <toolset>msvc:<link>static ]
- [ run libs/config/test/config_info.cpp : : : <test-info>always_show_run_output <threading>multi : config_info_threaded ]
- [ run libs/config/test/math_info.cpp : : : <test-info>always_show_run_output <toolset>borland:<runtime-link>static <toolset>borland:<link>static ]
- [ run libs/config/test/abi/abi_test.cpp libs/config/test/abi/main.cpp ]
- [ run libs/config/test/limits_test.cpp test_exec_monitor ]
- [ run libs/config/test/link/main.cpp ../libs/config/test/link//link_test
- : #args
- : #input-files
- : #requirements
- <runtime-link>shared
- <define>BOOST_DYN_LINK=1
- <define>BOOST_CONFIG_NO_LIB=1
- :
- config_link_test
- ]
- [ compile-fail libs/config/test/threads/test_thread_fail1.cpp ]
- [ compile-fail libs/config/test/threads/test_thread_fail2.cpp ]
- ;

Modified: branches/proto/v4/tools/build/v2/kernel/bootstrap.jam
==============================================================================
--- branches/proto/v4/tools/build/v2/kernel/bootstrap.jam (original)
+++ branches/proto/v4/tools/build/v2/kernel/bootstrap.jam 2008-04-14 18:16:44 EDT (Mon, 14 Apr 2008)
@@ -98,6 +98,8 @@
       new # until we get everything sorted out, there is
                     # still some code here
 
+ contrib # user contributed (unreviewed) modules
+
       . # build-system.jam lives here
 
       ;


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