Boost logo

Boost-Commit :

From: eric_at_[hidden]
Date: 2008-03-28 10:53:04


Author: eric_niebler
Date: 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
New Revision: 43910
URL: http://svn.boost.org/trac/boost/changeset/43910

Log:
Merged revisions 43810-43907 via svnmerge from
https://svn.boost.org/svn/boost/trunk

................
  r43810 | eric_niebler | 2008-03-23 14:51:40 -0700 (Sun, 23 Mar 2008) | 1 line
  
  mark up new foreach tests
................
  r43823 | fmhess | 2008-03-24 08:07:00 -0700 (Mon, 24 Mar 2008) | 3 lines
  
  Fixed compile error with new enable_shared_from_this code,
  reported by Tim Blechmann
................
  r43825 | ramey | 2008-03-24 08:46:09 -0700 (Mon, 24 Mar 2008) | 1 line
  
  removed EXIT_SUCCESS
................
  r43826 | ramey | 2008-03-24 08:46:43 -0700 (Mon, 24 Mar 2008) | 1 line
  
  fixed minor typo
................
  r43829 | pdimov | 2008-03-24 09:00:28 -0700 (Mon, 24 Mar 2008) | 1 line
  
  New enable_shared_from_this tests, fix.
................
  r43838 | danieljames | 2008-03-24 10:03:15 -0700 (Mon, 24 Mar 2008) | 12 lines
  
  Merge new changes to unordered & hash.
  
   - Unordered tests can run lightweight test or Boost.Test (at least
     theoretically).
   - Workaround Open BSD's incorrect numeric_limits.
   - Move the hash extensions in their own file.
   - Various small improvements to the unordered docs.
   - Fix some unordered examples.
  
  Merged revisions 43117-43837 via svnmerge from
  https://svn.boost.org/svn/boost/branches/unordered/trunk
................
  r43845 | dave | 2008-03-24 11:27:22 -0700 (Mon, 24 Mar 2008) | 1 line
  
  Work around vc9 bugs
................
  r43847 | anthonyw | 2008-03-24 14:44:36 -0700 (Mon, 24 Mar 2008) | 1 line
  
  removed forward declaration for undefined type exclusive_lock
................
  r43852 | hkaiser | 2008-03-25 06:40:53 -0700 (Tue, 25 Mar 2008) | 1 line
  
  Wave: Removed an assertion causing compilation problems on certain platforms.
................
  r43856 | pdimov | 2008-03-25 08:46:40 -0700 (Tue, 25 Mar 2008) | 1 line
  
  _internal_accept_owner now checks if _owned isn't already true.
................
  r43861 | dave | 2008-03-25 13:47:38 -0700 (Tue, 25 Mar 2008) | 2 lines
  
  Work around intel-10.0-win compiler bug
................
  r43864 | dave | 2008-03-25 15:28:59 -0700 (Tue, 25 Mar 2008) | 2 lines
  
  Account for intel 10.x compiler bug
................
  r43865 | dave | 2008-03-25 16:06:50 -0700 (Tue, 25 Mar 2008) | 2 lines
  
  Work around intel-win-10.0 preprocessor bug
................
  r43866 | danieljames | 2008-03-26 02:10:29 -0700 (Wed, 26 Mar 2008) | 3 lines
  
  Boost.Thread's documentation no longer has a build section - so just link to
  the library's documentation like we do for other libraries.
................
  r43867 | bemandawes | 2008-03-26 08:59:52 -0700 (Wed, 26 Mar 2008) | 1 line
  
  Initial commit
................
  r43873 | pdimov | 2008-03-26 11:34:29 -0700 (Wed, 26 Mar 2008) | 1 line
  
  Added "Throws: nothing" to get_deleter.
................
  r43875 | bemandawes | 2008-03-26 14:26:55 -0700 (Wed, 26 Mar 2008) | 1 line
  
  Initial commit
................
  r43876 | danieljames | 2008-03-26 22:49:45 -0700 (Wed, 26 Mar 2008) | 2 lines
  
  Update the thread links in the generated getting started documentation.
................
  r43879 | chris_kohlhoff | 2008-03-27 07:18:07 -0700 (Thu, 27 Mar 2008) | 3 lines
  
  Fix double-free error that occurs when an exception is thrown from a
  handler that has been dispatched (i.e. not posted) through a strand.
................
  r43880 | ramey | 2008-03-27 08:53:37 -0700 (Thu, 27 Mar 2008) | 1 line
  
  removed suppression of builds for certain platforms with shared libraries
................
  r43882 | ramey | 2008-03-27 10:11:23 -0700 (Thu, 27 Mar 2008) | 1 line
  
  tweaks to sneak past PGI compiler error message
................
  r43883 | ramey | 2008-03-27 10:12:22 -0700 (Thu, 27 Mar 2008) | 1 line
  
  added test to check warnings on type trait
................
  r43884 | dgregor | 2008-03-27 12:44:37 -0700 (Thu, 27 Mar 2008) | 1 line
  
  Change Boost.Function allocator behavior, from Emil Dotchevski
................
  r43887 | pdimov | 2008-03-27 15:13:55 -0700 (Thu, 27 Mar 2008) | 1 line
  
  Silence unused parameter warning.
................
  r43888 | pdimov | 2008-03-27 15:20:11 -0700 (Thu, 27 Mar 2008) | 1 line
  
  detail::yield(k) added.
................
  r43895 | danieljames | 2008-03-27 16:38:01 -0700 (Thu, 27 Mar 2008) | 25 lines
  
  Merged revisions 43838-43894 via svnmerge from
  https://svn.boost.org/svn/boost/branches/unordered/trunk
  
  ........
    r43840 | danieljames | 2008-03-24 17:25:07 +0000 (Mon, 24 Mar 2008) | 1 line
    
    Fix a g++ warning.
  ........
    r43844 | danieljames | 2008-03-24 17:56:28 +0000 (Mon, 24 Mar 2008) | 1 line
    
    It's a new-ish year.
  ........
    r43885 | danieljames | 2008-03-27 20:36:10 +0000 (Thu, 27 Mar 2008) | 1 line
    
    The release script doesn't need to copy images and css - because that's now done in the jamfiles. Also tweak the shell script a tad bit.
  ........
    r43890 | danieljames | 2008-03-27 23:01:40 +0000 (Thu, 27 Mar 2008) | 1 line
    
    Starting to add a docbook bibliography.
  ........
    r43894 | danieljames | 2008-03-27 23:24:18 +0000 (Thu, 27 Mar 2008) | 1 line
    
    Redeclare 'data' in iterator_base to help compilers which have trouble with accessing the nested typedef.
  ........
................
  r43900 | noel_belcourt | 2008-03-27 19:10:04 -0700 (Thu, 27 Mar 2008) | 4 lines
  
  Fix address-model support for 32/64 bit code generation.
  Replaced -mcmodel with -m32 / -m64.
................
  r43901 | bemandawes | 2008-03-27 19:11:13 -0700 (Thu, 27 Mar 2008) | 1 line
  
  Remove per email from Dave
................
  r43906 | eric_niebler | 2008-03-27 23:10:55 -0700 (Thu, 27 Mar 2008) | 1 line
  
  proto support for BOOST_PROTO_MAX_FUNCTION_CALL_ARITY
................

Added:
   branches/proto/v3/INSTALL
      - copied unchanged from r43906, /trunk/INSTALL
   branches/proto/v3/boost/detail/yield_k.hpp
      - copied unchanged from r43906, /trunk/boost/detail/yield_k.hpp
   branches/proto/v3/boost/functional/hash/extensions.hpp
      - copied unchanged from r43906, /trunk/boost/functional/hash/extensions.hpp
   branches/proto/v3/libs/smart_ptr/test/yield_k_test.cpp
      - copied unchanged from r43906, /trunk/libs/smart_ptr/test/yield_k_test.cpp
   branches/proto/v3/libs/unordered/doc/bibliography.xml
      - copied unchanged from r43906, /trunk/libs/unordered/doc/bibliography.xml
   branches/proto/v3/libs/unordered/doc/src_code/dictionary.cpp
      - copied unchanged from r43906, /trunk/libs/unordered/doc/src_code/dictionary.cpp
   branches/proto/v3/libs/unordered/doc/src_code/intro.cpp
      - copied unchanged from r43906, /trunk/libs/unordered/doc/src_code/intro.cpp
   branches/proto/v3/tools/release/make_packages.sh
      - copied unchanged from r43906, /trunk/tools/release/make_packages.sh
Removed:
   branches/proto/v3/libs/python/build/VisualStudio/
   branches/proto/v3/libs/unordered/doc/src_code/insensitive.cpp
Properties modified:
   branches/proto/v3/ (props changed)
Text files modified:
   branches/proto/v3/boost/asio/detail/strand_service.hpp | 6
   branches/proto/v3/boost/concept/requires.hpp | 8
   branches/proto/v3/boost/enable_shared_from_this.hpp | 16
   branches/proto/v3/boost/function/function_base.hpp | 212 ++++++++++-----
   branches/proto/v3/boost/function/function_template.hpp | 550 +++++++++++++++++++--------------------
   branches/proto/v3/boost/functional/detail/container_fwd.hpp | 2
   branches/proto/v3/boost/functional/detail/float_functions.hpp | 2
   branches/proto/v3/boost/functional/detail/hash_float.hpp | 50 ++
   branches/proto/v3/boost/functional/hash.hpp | 3
   branches/proto/v3/boost/functional/hash/deque.hpp | 2
   branches/proto/v3/boost/functional/hash/hash.hpp | 176 ------------
   branches/proto/v3/boost/functional/hash/list.hpp | 2
   branches/proto/v3/boost/functional/hash/map.hpp | 2
   branches/proto/v3/boost/functional/hash/pair.hpp | 2
   branches/proto/v3/boost/functional/hash/set.hpp | 2
   branches/proto/v3/boost/functional/hash/vector.hpp | 2
   branches/proto/v3/boost/functional/hash_fwd.hpp | 2
   branches/proto/v3/boost/mpl/aux_/preprocessor/is_seq.hpp | 2
   branches/proto/v3/boost/shared_ptr.hpp | 2
   branches/proto/v3/boost/static_warning.hpp | 5
   branches/proto/v3/boost/thread/detail/tss_hooks.hpp | 2
   branches/proto/v3/boost/thread/locks.hpp | 3
   branches/proto/v3/boost/unordered/detail/allocator.hpp | 2
   branches/proto/v3/boost/unordered/detail/hash_table.hpp | 2
   branches/proto/v3/boost/unordered/detail/hash_table_impl.hpp | 3
   branches/proto/v3/boost/unordered_map.hpp | 2
   branches/proto/v3/boost/unordered_set.hpp | 2
   branches/proto/v3/boost/wave/util/flex_string.hpp | 4
   branches/proto/v3/boost/xpressive/proto/detail/fun_call_ex.hpp | 2
   branches/proto/v3/boost/xpressive/proto/extends.hpp | 2
   branches/proto/v3/boost/xpressive/proto/proto_fwd.hpp | 8
   branches/proto/v3/libs/function/doc/history.xml | 16 +
   branches/proto/v3/libs/function/doc/reference.xml | 118 ++++----
   branches/proto/v3/libs/function/test/allocator_test.cpp | 61 +++
   branches/proto/v3/libs/functional/hash/doc/Jamfile.v2 | 15
   branches/proto/v3/libs/functional/hash/doc/changes.qbk | 2
   branches/proto/v3/libs/functional/hash/doc/disable.qbk | 2
   branches/proto/v3/libs/functional/hash/doc/hash.qbk | 2
   branches/proto/v3/libs/functional/hash/doc/intro.qbk | 2
   branches/proto/v3/libs/functional/hash/doc/links.qbk | 2
   branches/proto/v3/libs/functional/hash/doc/portability.qbk | 2
   branches/proto/v3/libs/functional/hash/doc/ref.xml | 2
   branches/proto/v3/libs/functional/hash/doc/thanks.qbk | 2
   branches/proto/v3/libs/functional/hash/doc/tutorial.qbk | 2
   branches/proto/v3/libs/functional/hash/examples/books.cpp | 2
   branches/proto/v3/libs/functional/hash/examples/books.hpp | 2
   branches/proto/v3/libs/functional/hash/examples/portable.cpp | 2
   branches/proto/v3/libs/functional/hash/test/Jamfile.v2 | 2
   branches/proto/v3/libs/functional/hash/test/compile_time.hpp | 2
   branches/proto/v3/libs/functional/hash/test/config.hpp | 2
   branches/proto/v3/libs/functional/hash/test/container_fwd_test.cpp | 2
   branches/proto/v3/libs/functional/hash/test/hash_built_in_array_test.cpp | 2
   branches/proto/v3/libs/functional/hash/test/hash_complex_test.cpp | 2
   branches/proto/v3/libs/functional/hash/test/hash_custom_test.cpp | 2
   branches/proto/v3/libs/functional/hash/test/hash_deprecated_headers.cpp | 2
   branches/proto/v3/libs/functional/hash/test/hash_deque_test.cpp | 2
   branches/proto/v3/libs/functional/hash/test/hash_float_test.cpp | 2
   branches/proto/v3/libs/functional/hash/test/hash_float_test.hpp | 86 +++---
   branches/proto/v3/libs/functional/hash/test/hash_friend_test.cpp | 2
   branches/proto/v3/libs/functional/hash/test/hash_function_pointer_test.cpp | 2
   branches/proto/v3/libs/functional/hash/test/hash_fwd_test.hpp | 2
   branches/proto/v3/libs/functional/hash/test/hash_fwd_test_1.cpp | 2
   branches/proto/v3/libs/functional/hash/test/hash_fwd_test_2.cpp | 2
   branches/proto/v3/libs/functional/hash/test/hash_global_namespace_test.cpp | 2
   branches/proto/v3/libs/functional/hash/test/hash_list_test.cpp | 2
   branches/proto/v3/libs/functional/hash/test/hash_long_double_test.cpp | 2
   branches/proto/v3/libs/functional/hash/test/hash_map_test.cpp | 2
   branches/proto/v3/libs/functional/hash/test/hash_map_test.hpp | 2
   branches/proto/v3/libs/functional/hash/test/hash_no_ext_fail_test.cpp | 2
   branches/proto/v3/libs/functional/hash/test/hash_no_ext_macro_1.cpp | 2
   branches/proto/v3/libs/functional/hash/test/hash_no_ext_macro_2.cpp | 2
   branches/proto/v3/libs/functional/hash/test/hash_number_test.cpp | 10
   branches/proto/v3/libs/functional/hash/test/hash_pointer_test.cpp | 2
   branches/proto/v3/libs/functional/hash/test/hash_range_test.cpp | 2
   branches/proto/v3/libs/functional/hash/test/hash_sequence_test.hpp | 2
   branches/proto/v3/libs/functional/hash/test/hash_set_test.cpp | 2
   branches/proto/v3/libs/functional/hash/test/hash_set_test.hpp | 2
   branches/proto/v3/libs/functional/hash/test/hash_string_test.cpp | 2
   branches/proto/v3/libs/functional/hash/test/hash_value_array_test.cpp | 2
   branches/proto/v3/libs/functional/hash/test/hash_vector_test.cpp | 2
   branches/proto/v3/libs/functional/hash/test/link_ext_test.cpp | 2
   branches/proto/v3/libs/functional/hash/test/link_no_ext_test.cpp | 2
   branches/proto/v3/libs/functional/hash/test/link_test.cpp | 2
   branches/proto/v3/libs/functional/hash/test/link_test_2.cpp | 2
   branches/proto/v3/libs/python/test/args.cpp | 2
   branches/proto/v3/libs/python/test/numpy.cpp | 29 -
   branches/proto/v3/libs/python/test/pickle3.cpp | 2
   branches/proto/v3/libs/python/test/slice.cpp | 2
   branches/proto/v3/libs/serialization/doc/archive_reference.html | 4
   branches/proto/v3/libs/serialization/test/test_static_warning.cpp | 20 +
   branches/proto/v3/libs/serialization/util/test.jam | 4
   branches/proto/v3/libs/smart_ptr/shared_ptr.htm | 1
   branches/proto/v3/libs/smart_ptr/test/Jamfile.v2 | 1
   branches/proto/v3/libs/smart_ptr/test/esft_regtest.cpp | 50 +++
   branches/proto/v3/libs/unordered/doc/Jamfile.v2 | 13
   branches/proto/v3/libs/unordered/doc/buckets.qbk | 2
   branches/proto/v3/libs/unordered/doc/comparison.qbk | 4
   branches/proto/v3/libs/unordered/doc/hash_equality.qbk | 38 +-
   branches/proto/v3/libs/unordered/doc/intro.qbk | 22 -
   branches/proto/v3/libs/unordered/doc/rationale.qbk | 4
   branches/proto/v3/libs/unordered/doc/ref.xml | 2
   branches/proto/v3/libs/unordered/doc/src_code/point1.cpp | 5
   branches/proto/v3/libs/unordered/doc/src_code/point2.cpp | 2
   branches/proto/v3/libs/unordered/doc/unordered.qbk | 6
   branches/proto/v3/libs/unordered/examples/case_insensitive.hpp | 2
   branches/proto/v3/libs/unordered/examples/case_insensitive_test.cpp | 2
   branches/proto/v3/libs/unordered/examples/hash_functions/fnv-1.hpp | 6
   branches/proto/v3/libs/unordered/test/Jamfile.v2 | 2
   branches/proto/v3/libs/unordered/test/exception/Jamfile.v2 | 2
   branches/proto/v3/libs/unordered/test/exception/assign_exception_tests.cpp | 2
   branches/proto/v3/libs/unordered/test/exception/constructor_exception_tests.cpp | 2
   branches/proto/v3/libs/unordered/test/exception/containers.hpp | 2
   branches/proto/v3/libs/unordered/test/exception/copy_exception_tests.cpp | 2
   branches/proto/v3/libs/unordered/test/exception/erase_exception_tests.cpp | 2
   branches/proto/v3/libs/unordered/test/exception/insert_exception_tests.cpp | 2
   branches/proto/v3/libs/unordered/test/exception/rehash_exception_tests.cpp | 2
   branches/proto/v3/libs/unordered/test/exception/swap_exception_tests.cpp | 2
   branches/proto/v3/libs/unordered/test/helpers/allocator.hpp | 2
   branches/proto/v3/libs/unordered/test/helpers/check_return_type.hpp | 2
   branches/proto/v3/libs/unordered/test/helpers/equivalent.hpp | 2
   branches/proto/v3/libs/unordered/test/helpers/exception_test.hpp | 16
   branches/proto/v3/libs/unordered/test/helpers/fwd.hpp | 2
   branches/proto/v3/libs/unordered/test/helpers/generators.hpp | 2
   branches/proto/v3/libs/unordered/test/helpers/helpers.hpp | 2
   branches/proto/v3/libs/unordered/test/helpers/input_iterator.hpp | 2
   branches/proto/v3/libs/unordered/test/helpers/invariants.hpp | 2
   branches/proto/v3/libs/unordered/test/helpers/metafunctions.hpp | 2
   branches/proto/v3/libs/unordered/test/helpers/random_values.hpp | 2
   branches/proto/v3/libs/unordered/test/helpers/strong.hpp | 2
   branches/proto/v3/libs/unordered/test/helpers/test.hpp | 81 +++++
   branches/proto/v3/libs/unordered/test/helpers/tracker.hpp | 2
   branches/proto/v3/libs/unordered/test/objects/exception.hpp | 2
   branches/proto/v3/libs/unordered/test/objects/fwd.hpp | 2
   branches/proto/v3/libs/unordered/test/objects/memory.hpp | 2
   branches/proto/v3/libs/unordered/test/objects/minimal.hpp | 2
   branches/proto/v3/libs/unordered/test/objects/test.hpp | 2
   branches/proto/v3/libs/unordered/test/unordered/Jamfile.v2 | 2
   branches/proto/v3/libs/unordered/test/unordered/assign_tests.cpp | 52 +--
   branches/proto/v3/libs/unordered/test/unordered/at_tests.cpp | 12
   branches/proto/v3/libs/unordered/test/unordered/bucket_tests.cpp | 21
   branches/proto/v3/libs/unordered/test/unordered/compile_map.cpp | 20 -
   branches/proto/v3/libs/unordered/test/unordered/compile_set.cpp | 18
   branches/proto/v3/libs/unordered/test/unordered/compile_tests.hpp | 2
   branches/proto/v3/libs/unordered/test/unordered/constructor_tests.cpp | 77 +---
   branches/proto/v3/libs/unordered/test/unordered/copy_tests.cpp | 47 +-
   branches/proto/v3/libs/unordered/test/unordered/equivalent_keys_tests.cpp | 16
   branches/proto/v3/libs/unordered/test/unordered/erase_equiv_tests.cpp | 26 -
   branches/proto/v3/libs/unordered/test/unordered/erase_tests.cpp | 46 +-
   branches/proto/v3/libs/unordered/test/unordered/find_tests.cpp | 38 +-
   branches/proto/v3/libs/unordered/test/unordered/insert_stable_tests.cpp | 16
   branches/proto/v3/libs/unordered/test/unordered/insert_tests.cpp | 4
   branches/proto/v3/libs/unordered/test/unordered/link_test_1.cpp | 2
   branches/proto/v3/libs/unordered/test/unordered/link_test_2.cpp | 2
   branches/proto/v3/libs/unordered/test/unordered/load_factor_tests.cpp | 33 +-
   branches/proto/v3/libs/unordered/test/unordered/rehash_tests.cpp | 23 +
   branches/proto/v3/libs/unordered/test/unordered/simple_tests.cpp | 10
   branches/proto/v3/libs/unordered/test/unordered/swap_tests.cpp | 37 +-
   branches/proto/v3/libs/unordered/test/unordered/unnecessary_copy_tests.cpp | 34 +-
   branches/proto/v3/more/getting_started/detail/links.rst | 2
   branches/proto/v3/more/getting_started/unix-variants.html | 2
   branches/proto/v3/more/getting_started/windows.html | 2
   branches/proto/v3/status/explicit-failures-markup.xml | 73 ++++
   branches/proto/v3/tools/build/v2/tools/intel-darwin.jam | 4
   163 files changed, 1306 insertions(+), 1169 deletions(-)

Modified: branches/proto/v3/boost/asio/detail/strand_service.hpp
==============================================================================
--- branches/proto/v3/boost/asio/detail/strand_service.hpp (original)
+++ branches/proto/v3/boost/asio/detail/strand_service.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -428,10 +428,9 @@
       if (impl->current_handler_ == 0)
       {
         // This handler now has the lock, so can be dispatched immediately.
- impl->current_handler_ = ptr.get();
+ impl->current_handler_ = ptr.release();
         lock.unlock();
         this->get_io_service().dispatch(invoke_current_handler(*this, impl));
- ptr.release();
       }
       else
       {
@@ -468,10 +467,9 @@
     if (impl->current_handler_ == 0)
     {
       // This handler now has the lock, so can be dispatched immediately.
- impl->current_handler_ = ptr.get();
+ impl->current_handler_ = ptr.release();
       lock.unlock();
       this->get_io_service().post(invoke_current_handler(*this, impl));
- ptr.release();
     }
     else
     {

Modified: branches/proto/v3/boost/concept/requires.hpp
==============================================================================
--- branches/proto/v3/boost/concept/requires.hpp (original)
+++ branches/proto/v3/boost/concept/requires.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -4,6 +4,7 @@
 #ifndef BOOST_CONCEPT_REQUIRES_DWA2006430_HPP
 # define BOOST_CONCEPT_REQUIRES_DWA2006430_HPP
 
+# include <boost/config.hpp>
 # include <boost/parameter/aux_/parenthesized_type.hpp>
 # include <boost/concept/assert.hpp>
 # include <boost/preprocessor/seq/for_each.hpp>
@@ -38,8 +39,11 @@
 # endif
 };
 
-
-#define BOOST_CONCEPT_REQUIRES_(r,data,t) + (::boost::_requires_<void(*)t>::value)
+# if BOOST_WORKAROUND(BOOST_INTEL_WIN, BOOST_TESTED_AT(1010))
+# define BOOST_CONCEPT_REQUIRES_(r,data,t) | (::boost::_requires_<void(*)t>::value)
+# else
+# define BOOST_CONCEPT_REQUIRES_(r,data,t) + (::boost::_requires_<void(*)t>::value)
+# endif
 
 #if defined(NDEBUG) || BOOST_WORKAROUND(BOOST_MSVC, < 1300)
 

Modified: branches/proto/v3/boost/enable_shared_from_this.hpp
==============================================================================
--- branches/proto/v3/boost/enable_shared_from_this.hpp (original)
+++ branches/proto/v3/boost/enable_shared_from_this.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -94,10 +94,18 @@
     void _internal_accept_owner(shared_ptr<U> &owner) const
     {
         init_internal_shared_once();
- get_deleter<detail::sp_deleter_wrapper>(_internal_shared_this)->set_deleter(owner);
- owner = _internal_shared_this;
- _internal_shared_this.reset();
- _owned = true;
+
+ if( !_owned )
+ {
+ detail::sp_deleter_wrapper * pd = get_deleter<detail::sp_deleter_wrapper>(_internal_shared_this);
+ BOOST_ASSERT( pd != 0 );
+ pd->set_deleter(owner);
+
+ owner.reset( _internal_shared_this, owner.get() );
+ _internal_shared_this.reset();
+
+ _owned = true;
+ }
     }
 };
 

Modified: branches/proto/v3/boost/function/function_base.hpp
==============================================================================
--- branches/proto/v3/boost/function/function_base.hpp (original)
+++ branches/proto/v3/boost/function/function_base.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,8 +1,9 @@
 // Boost.Function library
 
-// Copyright Douglas Gregor 2001-2006. Use, modification and
-// distribution is subject to the Boost Software License, Version
-// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// Copyright Douglas Gregor 2001-2006
+// Copyright Emil Dotchevski 2007
+// Use, modification and distribution is subject to the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
 // http://www.boost.org/LICENSE_1_0.txt)
 
 // For more information, see http://www.boost.org
@@ -73,7 +74,7 @@
 
 #if defined (BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
  || defined(BOOST_BCB_PARTIAL_SPECIALIZATION_BUG) \
- || !(defined(BOOST_STRICT_CONFIG) || !defined(__SUNPRO_CC) || __SUNPRO_CC > 0x540)
+ || !(BOOST_STRICT_CONFIG || !defined(__SUNPRO_CC) || __SUNPRO_CC > 0x540)
 # define BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX
 #endif
 
@@ -94,21 +95,12 @@
 #if !defined(BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX)
 namespace boost {
 
-#if defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 730 && !defined(BOOST_STRICT_CONFIG)
-// The library shipping with MIPSpro 7.3.1.3m has a broken allocator<void>
-class function_base;
-
-template<typename Signature,
- typename Allocator = std::allocator<function_base> >
-class function;
-#else
-template<typename Signature, typename Allocator = std::allocator<void> >
+template<typename Signature>
 class function;
-#endif
 
-template<typename Signature, typename Allocator>
-inline void swap(function<Signature, Allocator>& f1,
- function<Signature, Allocator>& f2)
+template<typename Signature>
+inline void swap(function<Signature>& f1,
+ function<Signature>& f2)
 {
   f1.swap(f2);
 }
@@ -212,8 +204,8 @@
       struct reference_manager
       {
         static inline void
- manage(const function_buffer& in_buffer, function_buffer& out_buffer,
- functor_manager_operation_type op)
+ get(const function_buffer& in_buffer, function_buffer& out_buffer,
+ functor_manager_operation_type op)
         {
           switch (op) {
           case clone_functor_tag:
@@ -259,20 +251,29 @@
                       % alignment_of<F>::value == 0))));
       };
 
+ template <typename F,typename A>
+ struct functor_wrapper: public F, public A
+ {
+ functor_wrapper( F f, A a ):
+ F(f),
+ A(a)
+ {
+ }
+ };
+
       /**
        * The functor_manager class contains a static function "manage" which
        * can clone or destroy the given function/function object pointer.
        */
- template<typename Functor, typename Allocator>
- struct functor_manager
+ template<typename Functor>
+ struct functor_manager_common
       {
- private:
         typedef Functor functor_type;
 
- // For function pointers, the manager is trivial
+ // Function pointers
         static inline void
- manager(const function_buffer& in_buffer, function_buffer& out_buffer,
- functor_manager_operation_type op, function_ptr_tag)
+ manage_ptr(const function_buffer& in_buffer, function_buffer& out_buffer,
+ functor_manager_operation_type op)
         {
           if (op == clone_functor_tag)
             out_buffer.func_ptr = in_buffer.func_ptr;
@@ -290,8 +291,8 @@
 
         // Function objects that fit in the small-object buffer.
         static inline void
- manager(const function_buffer& in_buffer, function_buffer& out_buffer,
- functor_manager_operation_type op, mpl::true_)
+ manage_small(const function_buffer& in_buffer, function_buffer& out_buffer,
+ functor_manager_operation_type op)
         {
           if (op == clone_functor_tag) {
             const functor_type* in_functor =
@@ -309,57 +310,48 @@
               out_buffer.obj_ptr = 0;
           }
         }
+ };
+
+ template<typename Functor>
+ struct functor_manager
+ {
+ private:
+ typedef Functor functor_type;
+
+ // Function pointers
+ static inline void
+ manager(const function_buffer& in_buffer, function_buffer& out_buffer,
+ functor_manager_operation_type op, function_ptr_tag)
+ {
+ functor_manager_common<Functor>::manage_ptr(in_buffer,out_buffer,op);
+ }
+
+ // Function objects that fit in the small-object buffer.
+ static inline void
+ manager(const function_buffer& in_buffer, function_buffer& out_buffer,
+ functor_manager_operation_type op, mpl::true_)
+ {
+ functor_manager_common<Functor>::manage_small(in_buffer,out_buffer,op);
+ }
         
         // Function objects that require heap allocation
         static inline void
         manager(const function_buffer& in_buffer, function_buffer& out_buffer,
                 functor_manager_operation_type op, mpl::false_)
         {
-#ifndef BOOST_NO_STD_ALLOCATOR
- typedef typename Allocator::template rebind<functor_type>::other
- allocator_type;
- typedef typename allocator_type::pointer pointer_type;
-#else
- typedef functor_type* pointer_type;
-#endif // BOOST_NO_STD_ALLOCATOR
-
-# ifndef BOOST_NO_STD_ALLOCATOR
- allocator_type allocator;
-# endif // BOOST_NO_STD_ALLOCATOR
-
           if (op == clone_functor_tag) {
+ // Clone the functor
             // GCC 2.95.3 gets the CV qualifiers wrong here, so we
             // can't do the static_cast that we should do.
             const functor_type* f =
               (const functor_type*)(in_buffer.obj_ptr);
-
- // Clone the functor
-# ifndef BOOST_NO_STD_ALLOCATOR
- pointer_type copy = allocator.allocate(1);
- allocator.construct(copy, *f);
-
- // Get back to the original pointer type
- functor_type* new_f = static_cast<functor_type*>(copy);
-# else
             functor_type* new_f = new functor_type(*f);
-# endif // BOOST_NO_STD_ALLOCATOR
             out_buffer.obj_ptr = new_f;
           } else if (op == destroy_functor_tag) {
             /* Cast from the void pointer to the functor pointer type */
             functor_type* f =
               static_cast<functor_type*>(out_buffer.obj_ptr);
-
-# ifndef BOOST_NO_STD_ALLOCATOR
- /* Cast from the functor pointer type to the allocator's pointer
- type */
- pointer_type victim = static_cast<pointer_type>(f);
-
- // Destroy and deallocate the functor
- allocator.destroy(victim);
- allocator.deallocate(victim, 1);
-# else
             delete f;
-# endif // BOOST_NO_STD_ALLOCATOR
             out_buffer.obj_ptr = 0;
           } else /* op == check_functor_type_tag */ {
             const BOOST_FUNCTION_STD_NS::type_info& check_type =
@@ -382,13 +374,98 @@
                   mpl::bool_<(function_allows_small_object_optimization<functor_type>::value)>());
         }
 
- // For member pointers, we treat them as function objects with
- // the small-object optimization always enabled.
+ public:
+ /* Dispatch to an appropriate manager based on whether we have a
+ function pointer or a function object pointer. */
+ static inline void
+ manage(const function_buffer& in_buffer, function_buffer& out_buffer,
+ functor_manager_operation_type op)
+ {
+ typedef typename get_function_tag<functor_type>::type tag_type;
+ switch (op) {
+ case get_functor_type_tag:
+ out_buffer.const_obj_ptr = &typeid(functor_type);
+ return;
+
+ default:
+ manager(in_buffer, out_buffer, op, tag_type());
+ return;
+ }
+ }
+ };
+
+ template<typename Functor, typename Allocator>
+ struct functor_manager_a
+ {
+ private:
+ typedef Functor functor_type;
+
+ // Function pointers
+ static inline void
+ manager(const function_buffer& in_buffer, function_buffer& out_buffer,
+ functor_manager_operation_type op, function_ptr_tag)
+ {
+ functor_manager_common<Functor>::manage_ptr(in_buffer,out_buffer,op);
+ }
+
+ // Function objects that fit in the small-object buffer.
         static inline void
         manager(const function_buffer& in_buffer, function_buffer& out_buffer,
- functor_manager_operation_type op, member_ptr_tag)
+ functor_manager_operation_type op, mpl::true_)
         {
- manager(in_buffer, out_buffer, op, mpl::true_());
+ functor_manager_common<Functor>::manage_small(in_buffer,out_buffer,op);
+ }
+
+ // Function objects that require heap allocation
+ static inline void
+ manager(const function_buffer& in_buffer, function_buffer& out_buffer,
+ functor_manager_operation_type op, mpl::false_)
+ {
+ typedef functor_wrapper<Functor,Allocator> functor_wrapper_type;
+ typedef typename Allocator::template rebind<functor_wrapper_type>::other
+ wrapper_allocator_type;
+ typedef typename wrapper_allocator_type::pointer wrapper_allocator_pointer_type;
+
+ if (op == clone_functor_tag) {
+ // Clone the functor
+ // GCC 2.95.3 gets the CV qualifiers wrong here, so we
+ // can't do the static_cast that we should do.
+ const functor_wrapper_type* f =
+ (const functor_wrapper_type*)(in_buffer.obj_ptr);
+ wrapper_allocator_type wrapper_allocator(static_cast<wrapper_allocator_type const &>(*f));
+ wrapper_allocator_pointer_type copy = wrapper_allocator.allocate(1);
+ wrapper_allocator.construct(copy, *f);
+
+ // Get back to the original pointer type
+ functor_wrapper_type* new_f = static_cast<functor_wrapper_type*>(copy);
+ out_buffer.obj_ptr = new_f;
+ } else if (op == destroy_functor_tag) {
+ /* Cast from the void pointer to the functor_wrapper_type */
+ functor_wrapper_type* victim =
+ static_cast<functor_wrapper_type*>(in_buffer.obj_ptr);
+ wrapper_allocator_type wrapper_allocator(static_cast<wrapper_allocator_type const &>(*victim));
+ wrapper_allocator.destroy(victim);
+ wrapper_allocator.deallocate(victim,1);
+ out_buffer.obj_ptr = 0;
+ } else /* op == check_functor_type_tag */ {
+ const BOOST_FUNCTION_STD_NS::type_info& check_type =
+ *static_cast<const BOOST_FUNCTION_STD_NS::type_info*>(out_buffer.const_obj_ptr);
+ if (BOOST_FUNCTION_COMPARE_TYPE_ID(check_type, typeid(Functor)))
+ out_buffer.obj_ptr = in_buffer.obj_ptr;
+ else
+ out_buffer.obj_ptr = 0;
+ }
+ }
+
+ // For function objects, we determine whether the function
+ // object can use the small-object optimization buffer or
+ // whether we need to allocate it on the heap.
+ static inline void
+ manager(const function_buffer& in_buffer, function_buffer& out_buffer,
+ functor_manager_operation_type op, function_obj_tag)
+ {
+ manager(in_buffer, out_buffer, op,
+ mpl::bool_<(function_allows_small_object_optimization<functor_type>::value)>());
         }
 
       public:
@@ -479,6 +556,7 @@
        */
       struct vtable_base
       {
+ vtable_base() : manager(0) { }
         void (*manager)(const function_buffer& in_buffer,
                         function_buffer& out_buffer,
                         functor_manager_operation_type op);
@@ -580,7 +658,7 @@
 #endif
 
 public: // should be protected, but GCC 2.95.3 will fail to allow access
- const detail::function::vtable_base* vtable;
+ detail::function::vtable_base* vtable;
   mutable detail::function::function_buffer functor;
 };
 
@@ -755,8 +833,4 @@
 #undef BOOST_FUNCTION_ENABLE_IF_NOT_INTEGRAL
 #undef BOOST_FUNCTION_COMPARE_TYPE_ID
 
-#if defined(BOOST_MSVC)
-# pragma warning( pop )
-#endif
-
 #endif // BOOST_FUNCTION_BASE_HEADER

Modified: branches/proto/v3/boost/function/function_template.hpp
==============================================================================
--- branches/proto/v3/boost/function/function_template.hpp (original)
+++ branches/proto/v3/boost/function/function_template.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,8 +1,9 @@
 // Boost.Function library
 
-// Copyright Douglas Gregor 2001-2006. Use, modification and
-// distribution is subject to the Boost Software License, Version
-// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// Copyright Douglas Gregor 2001-2006
+// Copyright Emil Dotchevski 2007
+// Use, modification and distribution is subject to the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
 // http://www.boost.org/LICENSE_1_0.txt)
 
 // For more information, see http://www.boost.org
@@ -31,13 +32,6 @@
 
 #define BOOST_FUNCTION_ARG_TYPES BOOST_PP_REPEAT(BOOST_FUNCTION_NUM_ARGS,BOOST_FUNCTION_ARG_TYPE,BOOST_PP_EMPTY)
 
-// Type of the default allocator
-#ifndef BOOST_NO_STD_ALLOCATOR
-# define BOOST_FUNCTION_DEFAULT_ALLOCATOR std::allocator<function_base>
-#else
-# define BOOST_FUNCTION_DEFAULT_ALLOCATOR int
-#endif // BOOST_NO_STD_ALLOCATOR
-
 // Comma if nonzero number of arguments
 #if BOOST_FUNCTION_NUM_ARGS == 0
 # define BOOST_FUNCTION_COMMA
@@ -59,20 +53,12 @@
   BOOST_JOIN(function_ref_invoker,BOOST_FUNCTION_NUM_ARGS)
 #define BOOST_FUNCTION_VOID_FUNCTION_REF_INVOKER \
   BOOST_JOIN(void_function_ref_invoker,BOOST_FUNCTION_NUM_ARGS)
-#define BOOST_FUNCTION_MEMBER_INVOKER \
- BOOST_JOIN(member_invoker,BOOST_FUNCTION_NUM_ARGS)
-#define BOOST_FUNCTION_VOID_MEMBER_INVOKER \
- BOOST_JOIN(void_member_invoker,BOOST_FUNCTION_NUM_ARGS)
 #define BOOST_FUNCTION_GET_FUNCTION_INVOKER \
   BOOST_JOIN(get_function_invoker,BOOST_FUNCTION_NUM_ARGS)
 #define BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER \
   BOOST_JOIN(get_function_obj_invoker,BOOST_FUNCTION_NUM_ARGS)
 #define BOOST_FUNCTION_GET_FUNCTION_REF_INVOKER \
   BOOST_JOIN(get_function_ref_invoker,BOOST_FUNCTION_NUM_ARGS)
-#define BOOST_FUNCTION_GET_MEMBER_INVOKER \
- BOOST_JOIN(get_member_invoker,BOOST_FUNCTION_NUM_ARGS)
-#define BOOST_FUNCTION_GET_INVOKER \
- BOOST_JOIN(get_invoker,BOOST_FUNCTION_NUM_ARGS)
 #define BOOST_FUNCTION_VTABLE BOOST_JOIN(basic_vtable,BOOST_FUNCTION_NUM_ARGS)
 
 #ifndef BOOST_NO_VOID_RETURNS
@@ -194,44 +180,6 @@
         }
       };
 
-#if BOOST_FUNCTION_NUM_ARGS > 0
- /* Handle invocation of member pointers. */
- template<
- typename MemberPtr,
- typename R BOOST_FUNCTION_COMMA
- BOOST_FUNCTION_TEMPLATE_PARMS
- >
- struct BOOST_FUNCTION_MEMBER_INVOKER
- {
- static R invoke(function_buffer& function_obj_ptr BOOST_FUNCTION_COMMA
- BOOST_FUNCTION_PARMS)
-
- {
- MemberPtr* f =
- reinterpret_cast<MemberPtr*>(&function_obj_ptr.data);
- return boost::mem_fn(*f)(BOOST_FUNCTION_ARGS);
- }
- };
-
- template<
- typename MemberPtr,
- typename R BOOST_FUNCTION_COMMA
- BOOST_FUNCTION_TEMPLATE_PARMS
- >
- struct BOOST_FUNCTION_VOID_MEMBER_INVOKER
- {
- static BOOST_FUNCTION_VOID_RETURN_TYPE
- invoke(function_buffer& function_obj_ptr BOOST_FUNCTION_COMMA
- BOOST_FUNCTION_PARMS)
-
- {
- MemberPtr* f =
- reinterpret_cast<MemberPtr*>(&function_obj_ptr.data);
- BOOST_FUNCTION_RETURN(boost::mem_fn(*f)(BOOST_FUNCTION_ARGS));
- }
- };
-#endif
-
       template<
         typename FunctionPtr,
         typename R BOOST_FUNCTION_COMMA
@@ -295,130 +243,11 @@
>::type type;
       };
 
-#if BOOST_FUNCTION_NUM_ARGS > 0
- /* Retrieve the appropriate invoker for a member pointer. */
- template<
- typename MemberPtr,
- typename R BOOST_FUNCTION_COMMA
- BOOST_FUNCTION_TEMPLATE_PARMS
- >
- struct BOOST_FUNCTION_GET_MEMBER_INVOKER
- {
- typedef typename mpl::if_c<(is_void<R>::value),
- BOOST_FUNCTION_VOID_MEMBER_INVOKER<
- MemberPtr,
- R BOOST_FUNCTION_COMMA
- BOOST_FUNCTION_TEMPLATE_ARGS
- >,
- BOOST_FUNCTION_MEMBER_INVOKER<
- MemberPtr,
- R BOOST_FUNCTION_COMMA
- BOOST_FUNCTION_TEMPLATE_ARGS
- >
- >::type type;
- };
-#endif
-
- /* Given the tag returned by get_function_tag, retrieve the
- actual invoker that will be used for the given function
- object.
-
- Each specialization contains an "apply" nested class template
- that accepts the function object, return type, function
- argument types, and allocator. The resulting "apply" class
- contains two typedefs, "invoker_type" and "manager_type",
- which correspond to the invoker and manager types. */
- template<typename Tag>
- struct BOOST_FUNCTION_GET_INVOKER { };
-
- /* Retrieve the invoker for a function pointer. */
- template<>
- struct BOOST_FUNCTION_GET_INVOKER<function_ptr_tag>
- {
- template<typename FunctionPtr,
- typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS,
- typename Allocator>
- struct apply
- {
- typedef typename BOOST_FUNCTION_GET_FUNCTION_INVOKER<
- FunctionPtr,
- R BOOST_FUNCTION_COMMA
- BOOST_FUNCTION_TEMPLATE_ARGS
- >::type
- invoker_type;
-
- typedef functor_manager<FunctionPtr, Allocator> manager_type;
- };
- };
-
-#if BOOST_FUNCTION_NUM_ARGS > 0
- /* Retrieve the invoker for a member pointer. */
- template<>
- struct BOOST_FUNCTION_GET_INVOKER<member_ptr_tag>
- {
- template<typename MemberPtr,
- typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS,
- typename Allocator>
- struct apply
- {
- typedef typename BOOST_FUNCTION_GET_MEMBER_INVOKER<
- MemberPtr,
- R BOOST_FUNCTION_COMMA
- BOOST_FUNCTION_TEMPLATE_ARGS
- >::type
- invoker_type;
-
- typedef functor_manager<MemberPtr, Allocator> manager_type;
- };
- };
-#endif
-
- /* Retrieve the invoker for a function object. */
- template<>
- struct BOOST_FUNCTION_GET_INVOKER<function_obj_tag>
- {
- template<typename FunctionObj,
- typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS,
- typename Allocator>
- struct apply
- {
- typedef typename BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER<
- FunctionObj,
- R BOOST_FUNCTION_COMMA
- BOOST_FUNCTION_TEMPLATE_ARGS
- >::type
- invoker_type;
-
- typedef functor_manager<FunctionObj, Allocator> manager_type;
- };
- };
-
- /* Retrieve the invoker for a reference to a function object. */
- template<>
- struct BOOST_FUNCTION_GET_INVOKER<function_obj_ref_tag>
- {
- template<typename RefWrapper,
- typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS,
- typename Allocator>
- struct apply
- {
- typedef typename BOOST_FUNCTION_GET_FUNCTION_REF_INVOKER<
- typename RefWrapper::type,
- R BOOST_FUNCTION_COMMA
- BOOST_FUNCTION_TEMPLATE_ARGS
- >::type
- invoker_type;
-
- typedef reference_manager<typename RefWrapper::type> manager_type;
- };
- };
-
       /**
        * vtable for a specific boost::function instance.
        */
- template<typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS,
- typename Allocator>
- struct BOOST_FUNCTION_VTABLE
+ template<typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS>
+ struct BOOST_FUNCTION_VTABLE : vtable_base
       {
 #ifndef BOOST_NO_VOID_RETURNS
         typedef R result_type;
@@ -431,25 +260,80 @@
                                             BOOST_FUNCTION_TEMPLATE_ARGS);
 
         template<typename F>
- bool assign_to(const F& f, function_buffer& functor) const
+ BOOST_FUNCTION_VTABLE(F f) : vtable_base(), invoker(0)
+ {
+ init(f);
+ }
+ template<typename F,typename Allocator>
+ BOOST_FUNCTION_VTABLE(F f, Allocator) : vtable_base(), invoker(0)
+ {
+ init_a<Allocator>(f);
+ }
+
+ template<typename F>
+ bool assign_to(F f, function_buffer& functor)
         {
           typedef typename get_function_tag<F>::type tag;
           return assign_to(f, functor, tag());
         }
+ template<typename F,typename Allocator>
+ bool assign_to_a(F f, function_buffer& functor, Allocator a)
+ {
+ typedef typename get_function_tag<F>::type tag;
+ return assign_to_a(f, functor, a, tag());
+ }
 
- void clear(function_buffer& functor) const
+ void clear(function_buffer& functor)
         {
- if (base.manager)
- base.manager(functor, functor, destroy_functor_tag);
+ if (manager)
+ manager(functor, functor, destroy_functor_tag);
         }
-#ifndef BOOST_NO_PRIVATE_IN_AGGREGATE
+
       private:
-#endif
+ template<typename F>
+ void init(F f)
+ {
+ typedef typename get_function_tag<F>::type tag;
+ init(f, tag());
+ }
+ template<typename Allocator,typename F>
+ void init_a(F f)
+ {
+ typedef typename get_function_tag<F>::type tag;
+ init_a<Allocator>(f, tag());
+ }
+
         // Function pointers
         template<typename FunctionPtr>
+ void init(FunctionPtr /*f*/, function_ptr_tag)
+ {
+ typedef typename BOOST_FUNCTION_GET_FUNCTION_INVOKER<
+ FunctionPtr,
+ R BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_TEMPLATE_ARGS
+ >::type
+ actual_invoker_type;
+
+ invoker = &actual_invoker_type::invoke;
+ manager = &functor_manager<FunctionPtr>::manage;
+ }
+ template<typename Allocator,typename FunctionPtr>
+ void init_a(FunctionPtr f, function_ptr_tag)
+ {
+ typedef typename BOOST_FUNCTION_GET_FUNCTION_INVOKER<
+ FunctionPtr,
+ R BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_TEMPLATE_ARGS
+ >::type
+ actual_invoker_type;
+
+ invoker = &actual_invoker_type::invoke;
+ manager = &functor_manager_a<FunctionPtr, Allocator>::manage;
+ }
+
+ template<typename FunctionPtr>
         bool
- assign_to(FunctionPtr f, function_buffer& functor,
- function_ptr_tag) const
+ assign_to(FunctionPtr f, function_buffer& functor, function_ptr_tag)
         {
           this->clear(functor);
           if (f) {
@@ -461,17 +345,53 @@
             return false;
           }
         }
+ template<typename FunctionPtr,typename Allocator>
+ bool
+ assign_to_a(FunctionPtr f, function_buffer& functor, Allocator, function_ptr_tag)
+ {
+ return assign_to(f,functor,function_ptr_tag());
+ }
 
         // Member pointers
 #if BOOST_FUNCTION_NUM_ARGS > 0
         template<typename MemberPtr>
- bool
- assign_to(MemberPtr f, function_buffer& functor, member_ptr_tag) const
+ void init(MemberPtr f, member_ptr_tag)
         {
+ // DPG TBD: Add explicit support for member function
+ // objects, so we invoke through mem_fn() but we retain the
+ // right target_type() values.
+ this->init(mem_fn(f));
+ }
+ template<typename Allocator,typename MemberPtr>
+ void init_a(MemberPtr f, member_ptr_tag)
+ {
+ // DPG TBD: Add explicit support for member function
+ // objects, so we invoke through mem_fn() but we retain the
+ // right target_type() values.
+ this->init_a<Allocator>(mem_fn(f));
+ }
+
+ template<typename MemberPtr>
+ bool assign_to(MemberPtr f, function_buffer& functor, member_ptr_tag)
+ {
+ // DPG TBD: Add explicit support for member function
+ // objects, so we invoke through mem_fn() but we retain the
+ // right target_type() values.
+ if (f) {
+ this->assign_to(mem_fn(f), functor);
+ return true;
+ } else {
+ return false;
+ }
+ }
+ template<typename MemberPtr,typename Allocator>
+ bool assign_to_a(MemberPtr f, function_buffer& functor, Allocator a, member_ptr_tag)
+ {
+ // DPG TBD: Add explicit support for member function
+ // objects, so we invoke through mem_fn() but we retain the
+ // right target_type() values.
           if (f) {
- // Always use the small-object optimization for member
- // pointers.
- assign_functor(f, functor, mpl::true_());
+ this->assign_to_a(mem_fn(f), functor, a);
             return true;
           } else {
             return false;
@@ -480,41 +400,72 @@
 #endif // BOOST_FUNCTION_NUM_ARGS > 0
 
         // Function objects
+ template<typename FunctionObj>
+ void init(FunctionObj /*f*/, function_obj_tag)
+ {
+ typedef typename BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER<
+ FunctionObj,
+ R BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_TEMPLATE_ARGS
+ >::type
+ actual_invoker_type;
+
+ invoker = &actual_invoker_type::invoke;
+ manager = &functor_manager<FunctionObj>::manage;
+ }
+ template<typename Allocator,typename FunctionObj>
+ void init_a(FunctionObj /*f*/, function_obj_tag)
+ {
+ typedef typename BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER<
+ FunctionObj,
+ R BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_TEMPLATE_ARGS
+ >::type
+ actual_invoker_type;
+
+ invoker = &actual_invoker_type::invoke;
+ manager = &functor_manager_a<FunctionObj, Allocator>::manage;
+ }
+
         // Assign to a function object using the small object optimization
         template<typename FunctionObj>
         void
- assign_functor(const FunctionObj& f, function_buffer& functor,
- mpl::true_) const
+ assign_functor(FunctionObj f, function_buffer& functor, mpl::true_)
         {
           new ((void*)&functor.data) FunctionObj(f);
         }
+ template<typename FunctionObj,typename Allocator>
+ void
+ assign_functor_a(FunctionObj f, function_buffer& functor, Allocator, mpl::true_)
+ {
+ assign_functor(f,functor,mpl::true_());
+ }
 
         // Assign to a function object allocated on the heap.
         template<typename FunctionObj>
         void
- assign_functor(const FunctionObj& f, function_buffer& functor,
- mpl::false_) const
+ assign_functor(FunctionObj f, function_buffer& functor, mpl::false_)
         {
-#ifndef BOOST_NO_STD_ALLOCATOR
- typedef typename Allocator::template rebind<FunctionObj>::other
- allocator_type;
- typedef typename allocator_type::pointer pointer_type;
-
- allocator_type allocator;
- pointer_type copy = allocator.allocate(1);
- allocator.construct(copy, f);
-
- // Get back to the original pointer type
- functor.obj_ptr = static_cast<FunctionObj*>(copy);
-# else
           functor.obj_ptr = new FunctionObj(f);
-# endif // BOOST_NO_STD_ALLOCATOR
+ }
+ template<typename FunctionObj,typename Allocator>
+ void
+ assign_functor_a(FunctionObj f, function_buffer& functor, Allocator a, mpl::false_)
+ {
+ typedef functor_wrapper<FunctionObj,Allocator> functor_wrapper_type;
+ typedef typename Allocator::template rebind<functor_wrapper_type>::other
+ wrapper_allocator_type;
+ typedef typename wrapper_allocator_type::pointer wrapper_allocator_pointer_type;
+ wrapper_allocator_type wrapper_allocator(a);
+ wrapper_allocator_pointer_type copy = wrapper_allocator.allocate(1);
+ wrapper_allocator.construct(copy, functor_wrapper_type(f,a));
+ functor_wrapper_type* new_f = static_cast<functor_wrapper_type*>(copy);
+ functor.obj_ptr = new_f;
         }
 
         template<typename FunctionObj>
         bool
- assign_to(const FunctionObj& f, function_buffer& functor,
- function_obj_tag) const
+ assign_to(FunctionObj f, function_buffer& functor, function_obj_tag)
         {
           if (!boost::detail::function::has_empty_target(boost::addressof(f))) {
             assign_functor(f, functor,
@@ -524,12 +475,45 @@
             return false;
           }
         }
+ template<typename FunctionObj,typename Allocator>
+ bool
+ assign_to_a(FunctionObj f, function_buffer& functor, Allocator a, function_obj_tag)
+ {
+ if (!boost::detail::function::has_empty_target(boost::addressof(f))) {
+ assign_functor_a(f, functor, a,
+ mpl::bool_<(function_allows_small_object_optimization<FunctionObj>::value)>());
+ return true;
+ } else {
+ return false;
+ }
+ }
 
         // Reference to a function object
         template<typename FunctionObj>
+ void
+ init(const reference_wrapper<FunctionObj>& /*f*/, function_obj_ref_tag)
+ {
+ typedef typename BOOST_FUNCTION_GET_FUNCTION_REF_INVOKER<
+ FunctionObj,
+ R BOOST_FUNCTION_COMMA
+ BOOST_FUNCTION_TEMPLATE_ARGS
+ >::type
+ actual_invoker_type;
+
+ invoker = &actual_invoker_type::invoke;
+ manager = &reference_manager<FunctionObj>::get;
+ }
+ template<typename Allocator,typename FunctionObj>
+ void
+ init_a(const reference_wrapper<FunctionObj>& f, function_obj_ref_tag)
+ {
+ init(f,function_obj_ref_tag());
+ }
+
+ template<typename FunctionObj>
         bool
         assign_to(const reference_wrapper<FunctionObj>& f,
- function_buffer& functor, function_obj_ref_tag) const
+ function_buffer& functor, function_obj_ref_tag)
         {
           if (!boost::detail::function::has_empty_target(f.get_pointer())) {
             // DPG TBD: We might need to detect constness of
@@ -542,9 +526,15 @@
             return false;
           }
         }
+ template<typename FunctionObj,typename Allocator>
+ bool
+ assign_to_a(const reference_wrapper<FunctionObj>& f,
+ function_buffer& functor, Allocator, function_obj_ref_tag)
+ {
+ return assign_to(f,functor,function_obj_ref_tag());
+ }
 
       public:
- vtable_base base;
         invoker_type invoker;
       };
     } // end namespace function
@@ -552,8 +542,7 @@
 
   template<
     typename R BOOST_FUNCTION_COMMA
- BOOST_FUNCTION_TEMPLATE_PARMS,
- typename Allocator = BOOST_FUNCTION_DEFAULT_ALLOCATOR
+ BOOST_FUNCTION_TEMPLATE_PARMS
>
   class BOOST_FUNCTION_FUNCTION : public function_base
 
@@ -578,7 +567,7 @@
 
   private:
     typedef boost::detail::function::BOOST_FUNCTION_VTABLE<
- R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_ARGS, Allocator>
+ R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_ARGS>
       vtable_type;
 
     struct clear_type {};
@@ -603,7 +592,6 @@
     BOOST_STATIC_CONSTANT(int, arity = BOOST_FUNCTION_NUM_ARGS);
     BOOST_FUNCTION_ARG_TYPES
 
- typedef Allocator allocator_type;
     typedef BOOST_FUNCTION_FUNCTION self_type;
 
     BOOST_FUNCTION_FUNCTION() : function_base() { }
@@ -623,6 +611,19 @@
     {
       this->assign_to(f);
     }
+ template<typename Functor,typename Allocator>
+ BOOST_FUNCTION_FUNCTION(Functor BOOST_FUNCTION_TARGET_FIX(const &) f, Allocator a
+#ifndef BOOST_NO_SFINAE
+ ,typename enable_if_c<
+ (boost::type_traits::ice_not<
+ (is_integral<Functor>::value)>::value),
+ int>::type = 0
+#endif // BOOST_NO_SFINAE
+ ) :
+ function_base()
+ {
+ this->assign_to_a(f,a);
+ }
 
 #ifndef BOOST_NO_SFINAE
     BOOST_FUNCTION_FUNCTION(clear_type*) : function_base() { }
@@ -648,7 +649,7 @@
       if (this->empty())
         boost::throw_exception(bad_function_call());
 
- return reinterpret_cast<const vtable_type*>(vtable)->invoker
+ return static_cast<vtable_type*>(vtable)->invoker
                (this->functor BOOST_FUNCTION_COMMA BOOST_FUNCTION_ARGS);
     }
 #else
@@ -672,18 +673,25 @@
     operator=(Functor BOOST_FUNCTION_TARGET_FIX(const &) f)
     {
       this->clear();
-#ifndef BOOST_NO_EXCEPTIONS
       try {
         this->assign_to(f);
       } catch (...) {
         vtable = 0;
         throw;
       }
-#else
- this->assign_to(f);
-#endif
       return *this;
     }
+ template<typename Functor,typename Allocator>
+ void assign(Functor BOOST_FUNCTION_TARGET_FIX(const &) f, Allocator a)
+ {
+ this->clear();
+ try {
+ this->assign_to_a(f,a);
+ } catch (...) {
+ vtable = 0;
+ throw;
+ }
+ }
 
 #ifndef BOOST_NO_SFINAE
     BOOST_FUNCTION_FUNCTION& operator=(clear_type*)
@@ -707,16 +715,12 @@
         return *this;
 
       this->clear();
-#ifndef BOOST_NO_EXCEPTIONS
       try {
         this->assign_to_own(f);
       } catch (...) {
         vtable = 0;
         throw;
       }
-#else
- this->assign_to_own(f);
-#endif
       return *this;
     }
 
@@ -734,7 +738,7 @@
     void clear()
     {
       if (vtable) {
- reinterpret_cast<const vtable_type*>(vtable)->clear(this->functor);
+ static_cast<vtable_type*>(vtable)->clear(this->functor);
         vtable = 0;
       }
     }
@@ -769,84 +773,64 @@
     }
 
     template<typename Functor>
- void assign_to(const Functor& f)
+ void assign_to(Functor f)
     {
- using detail::function::vtable_base;
-
- typedef typename detail::function::get_function_tag<Functor>::type tag;
- typedef detail::function::BOOST_FUNCTION_GET_INVOKER<tag> get_invoker;
- typedef typename get_invoker::
- template apply<Functor, R BOOST_FUNCTION_COMMA
- BOOST_FUNCTION_TEMPLATE_ARGS, Allocator>
- handler_type;
-
- typedef typename handler_type::invoker_type invoker_type;
- typedef typename handler_type::manager_type manager_type;
-
- static const vtable_type stored_vtable =
- { { &manager_type::manage }, &invoker_type::invoke };
-
- if (stored_vtable.assign_to(f, functor)) vtable = &stored_vtable.base;
+ static vtable_type stored_vtable(f);
+ if (stored_vtable.assign_to(f, functor)) vtable = &stored_vtable;
+ else vtable = 0;
+ }
+ template<typename Functor,typename Allocator>
+ void assign_to_a(Functor f,Allocator a)
+ {
+ static vtable_type stored_vtable(f,a);
+ if (stored_vtable.assign_to_a(f, functor, a)) vtable = &stored_vtable;
       else vtable = 0;
     }
   };
 
- template<typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS ,
- typename Allocator>
+ template<typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS>
   inline void swap(BOOST_FUNCTION_FUNCTION<
                      R BOOST_FUNCTION_COMMA
- BOOST_FUNCTION_TEMPLATE_ARGS ,
- Allocator
+ BOOST_FUNCTION_TEMPLATE_ARGS
>& f1,
                    BOOST_FUNCTION_FUNCTION<
                      R BOOST_FUNCTION_COMMA
- BOOST_FUNCTION_TEMPLATE_ARGS,
- Allocator
+ BOOST_FUNCTION_TEMPLATE_ARGS
>& f2)
   {
     f1.swap(f2);
   }
 
 #if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
- template<typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS,
- typename Allocator>
+ template<typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS>
   typename BOOST_FUNCTION_FUNCTION<
- R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_ARGS,
- Allocator>::result_type
- BOOST_FUNCTION_FUNCTION<R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_ARGS,
-
- Allocator>
+ R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_ARGS>::result_type
+ BOOST_FUNCTION_FUNCTION<R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_ARGS>
   ::operator()(BOOST_FUNCTION_PARMS) const
   {
     if (this->empty())
       boost::throw_exception(bad_function_call());
 
- return reinterpret_cast<const vtable_type*>(vtable)->invoker
+ return static_cast<vtable_type*>(vtable)->invoker
              (this->functor BOOST_FUNCTION_COMMA BOOST_FUNCTION_ARGS);
   }
 #endif
 
 // Poison comparisons between boost::function objects of the same type.
-template<typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS ,
- typename Allocator>
+template<typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS>
   void operator==(const BOOST_FUNCTION_FUNCTION<
                           R BOOST_FUNCTION_COMMA
- BOOST_FUNCTION_TEMPLATE_ARGS ,
- Allocator>&,
+ BOOST_FUNCTION_TEMPLATE_ARGS>&,
                   const BOOST_FUNCTION_FUNCTION<
                           R BOOST_FUNCTION_COMMA
- BOOST_FUNCTION_TEMPLATE_ARGS ,
- Allocator>&);
-template<typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS ,
- typename Allocator>
+ BOOST_FUNCTION_TEMPLATE_ARGS>&);
+template<typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS>
   void operator!=(const BOOST_FUNCTION_FUNCTION<
                           R BOOST_FUNCTION_COMMA
- BOOST_FUNCTION_TEMPLATE_ARGS ,
- Allocator>&,
+ BOOST_FUNCTION_TEMPLATE_ARGS>&,
                   const BOOST_FUNCTION_FUNCTION<
                           R BOOST_FUNCTION_COMMA
- BOOST_FUNCTION_TEMPLATE_ARGS ,
- Allocator>&);
+ BOOST_FUNCTION_TEMPLATE_ARGS>& );
 
 #if !defined(BOOST_FUNCTION_NO_FUNCTION_TYPE_SYNTAX)
 
@@ -857,20 +841,16 @@
 #endif
 
 template<typename R BOOST_FUNCTION_COMMA
- BOOST_FUNCTION_TEMPLATE_PARMS,
- typename Allocator>
-class function<BOOST_FUNCTION_PARTIAL_SPEC, Allocator>
- : public BOOST_FUNCTION_FUNCTION<R, BOOST_FUNCTION_TEMPLATE_ARGS
- BOOST_FUNCTION_COMMA Allocator>
+ BOOST_FUNCTION_TEMPLATE_PARMS>
+class function<BOOST_FUNCTION_PARTIAL_SPEC>
+ : public BOOST_FUNCTION_FUNCTION<R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_ARGS>
 {
- typedef BOOST_FUNCTION_FUNCTION<R, BOOST_FUNCTION_TEMPLATE_ARGS
- BOOST_FUNCTION_COMMA Allocator> base_type;
+ typedef BOOST_FUNCTION_FUNCTION<R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_ARGS> base_type;
   typedef function self_type;
 
   struct clear_type {};
 
 public:
- typedef typename base_type::allocator_type allocator_type;
 
   function() : base_type() {}
 
@@ -886,6 +866,18 @@
     base_type(f)
   {
   }
+ template<typename Functor,typename Allocator>
+ function(Functor f, Allocator a
+#ifndef BOOST_NO_SFINAE
+ ,typename enable_if_c<
+ (boost::type_traits::ice_not<
+ (is_integral<Functor>::value)>::value),
+ int>::type = 0
+#endif
+ ) :
+ base_type(f,a)
+ {
+ }
 
 #ifndef BOOST_NO_SFINAE
   function(clear_type*) : base_type() {}
@@ -938,8 +930,6 @@
 
 // Cleanup after ourselves...
 #undef BOOST_FUNCTION_VTABLE
-#undef BOOST_FUNCTION_GET_INVOKER
-#undef BOOST_FUNCTION_DEFAULT_ALLOCATOR
 #undef BOOST_FUNCTION_COMMA
 #undef BOOST_FUNCTION_FUNCTION
 #undef BOOST_FUNCTION_FUNCTION_INVOKER
@@ -948,12 +938,10 @@
 #undef BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER
 #undef BOOST_FUNCTION_FUNCTION_REF_INVOKER
 #undef BOOST_FUNCTION_VOID_FUNCTION_REF_INVOKER
-#undef BOOST_FUNCTION_MEMBER_INVOKER
-#undef BOOST_FUNCTION_VOID_MEMBER_INVOKER
 #undef BOOST_FUNCTION_GET_FUNCTION_INVOKER
 #undef BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER
 #undef BOOST_FUNCTION_GET_FUNCTION_REF_INVOKER
-#undef BOOST_FUNCTION_GET_MEMBER_INVOKER
+#undef BOOST_FUNCTION_GET_MEM_FUNCTION_INVOKER
 #undef BOOST_FUNCTION_TEMPLATE_PARMS
 #undef BOOST_FUNCTION_TEMPLATE_ARGS
 #undef BOOST_FUNCTION_PARMS

Modified: branches/proto/v3/boost/functional/detail/container_fwd.hpp
==============================================================================
--- branches/proto/v3/boost/functional/detail/container_fwd.hpp (original)
+++ branches/proto/v3/boost/functional/detail/container_fwd.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/boost/functional/detail/float_functions.hpp
==============================================================================
--- branches/proto/v3/boost/functional/detail/float_functions.hpp (original)
+++ branches/proto/v3/boost/functional/detail/float_functions.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/boost/functional/detail/hash_float.hpp
==============================================================================
--- branches/proto/v3/boost/functional/detail/hash_float.hpp (original)
+++ branches/proto/v3/boost/functional/detail/hash_float.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 
@@ -54,10 +54,43 @@
 
 #endif
 
+// On OpenBSD, numeric_limits is not reliable for long doubles, but
+// the macros defined in <float.h> are.
+
+#if defined(__OpenBSD__)
+#include <float.h>
+#endif
+
 namespace boost
 {
     namespace hash_detail
     {
+ template <class T>
+ struct limits : std::numeric_limits<T> {};
+
+#if defined(__OpenBSD__)
+ template <>
+ struct limits<long double>
+ : std::numeric_limits<long double>
+ {
+ static long double epsilon() {
+ return LDBL_EPSILON;
+ }
+
+ static long double (max)() {
+ return LDBL_MAX;
+ }
+
+ static long double (min)() {
+ return LDBL_MIN;
+ }
+
+ BOOST_STATIC_CONSTANT(int, digits = LDBL_MANT_DIG);
+ BOOST_STATIC_CONSTANT(int, max_exponent = LDBL_MAX_EXP);
+ BOOST_STATIC_CONSTANT(int, min_exponent = LDBL_MIN_EXP);
+ };
+#endif // __OpenBSD__
+
         inline void hash_float_combine(std::size_t& seed, std::size_t value)
         {
             seed ^= value + (seed<<6) + (seed>>2);
@@ -102,29 +135,28 @@
             // sign with the exponent.
             if(v < 0) {
                 v = -v;
- exp += std::numeric_limits<T>::max_exponent -
- std::numeric_limits<T>::min_exponent;
+ exp += limits<T>::max_exponent -
+ limits<T>::min_exponent;
             }
 
             // The result of frexp is always between 0.5 and 1, so its
             // top bit will always be 1. Subtract by 0.5 to remove that.
             v -= T(0.5);
             v = boost::hash_detail::call_ldexp(v,
- std::numeric_limits<std::size_t>::digits + 1);
+ limits<std::size_t>::digits + 1);
             std::size_t seed = static_cast<std::size_t>(v);
             v -= seed;
 
             // ceiling(digits(T) * log2(radix(T))/ digits(size_t)) - 1;
             std::size_t const length
- = (std::numeric_limits<T>::digits *
- boost::static_log2<std::numeric_limits<T>::radix>::value
- - 1)
- / std::numeric_limits<std::size_t>::digits;
+ = (limits<T>::digits *
+ boost::static_log2<limits<T>::radix>::value - 1)
+ / limits<std::size_t>::digits;
 
             for(std::size_t i = 0; i != length; ++i)
             {
                 v = boost::hash_detail::call_ldexp(v,
- std::numeric_limits<std::size_t>::digits);
+ limits<std::size_t>::digits);
                 std::size_t part = static_cast<std::size_t>(v);
                 v -= part;
                 hash_float_combine(seed, part);

Modified: branches/proto/v3/boost/functional/hash.hpp
==============================================================================
--- branches/proto/v3/boost/functional/hash.hpp (original)
+++ branches/proto/v3/boost/functional/hash.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 
@@ -8,3 +8,4 @@
 // issue 6.18.
 
 #include <boost/functional/hash/hash.hpp>
+

Modified: branches/proto/v3/boost/functional/hash/deque.hpp
==============================================================================
--- branches/proto/v3/boost/functional/hash/deque.hpp (original)
+++ branches/proto/v3/boost/functional/hash/deque.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/boost/functional/hash/hash.hpp
==============================================================================
--- branches/proto/v3/boost/functional/hash/hash.hpp (original)
+++ branches/proto/v3/boost/functional/hash/hash.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 
@@ -518,176 +518,12 @@
 }
 
 #endif // BOOST_FUNCTIONAL_HASH_HASH_HPP
-////////////////////////////////////////////////////////////////////////////////
+
+// Include this outside of the include guards in case the file is included
+// twice - once with BOOST_HASH_NO_EXTENSIONS defined, and then with it
+// undefined.
 
 #if !defined(BOOST_HASH_NO_EXTENSIONS) \
     && !defined(BOOST_FUNCTIONAL_HASH_EXTENSIONS_HPP)
-#define BOOST_FUNCTIONAL_HASH_EXTENSIONS_HPP
-
-namespace boost
-{
-
-#if defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
- namespace hash_detail
- {
- template <bool IsArray>
- struct call_hash_impl
- {
- template <class T>
- struct inner
- {
- static std::size_t call(T const& v)
- {
- using namespace boost;
- return hash_value(v);
- }
- };
- };
-
- template <>
- struct call_hash_impl<true>
- {
- template <class Array>
- struct inner
- {
-#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
- static std::size_t call(Array const& v)
-#else
- static std::size_t call(Array& v)
-#endif
- {
- const int size = sizeof(v) / sizeof(*v);
- return boost::hash_range(v, v + size);
- }
- };
- };
-
- template <class T>
- struct call_hash
- : public call_hash_impl<boost::is_array<T>::value>
- ::BOOST_NESTED_TEMPLATE inner<T>
- {
- };
- }
-#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
-
-#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
-
- template <class T> struct hash
- : std::unary_function<T, std::size_t>
- {
-#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
- std::size_t operator()(T const& val) const
- {
- return hash_value(val);
- }
-#else
- std::size_t operator()(T const& val) const
- {
- return hash_detail::call_hash<T>::call(val);
- }
-#endif
- };
-
-#if BOOST_WORKAROUND(__DMC__, <= 0x848)
- template <class T, unsigned int n> struct hash<T[n]>
- : std::unary_function<T[n], std::size_t>
- {
- std::size_t operator()(const T* val) const
- {
- return boost::hash_range(val, val+n);
- }
- };
-#endif
-
-#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-
- // On compilers without partial specialization, boost::hash<T>
- // has already been declared to deal with pointers, so just
- // need to supply the non-pointer version.
-
- namespace hash_detail
- {
- template <bool IsPointer>
- struct hash_impl;
-
-#if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-
- template <>
- struct hash_impl<false>
- {
- template <class T>
- struct inner
- : std::unary_function<T, std::size_t>
- {
-#if !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
- std::size_t operator()(T const& val) const
- {
- return hash_value(val);
- }
-#else
- std::size_t operator()(T const& val) const
- {
- return hash_detail::call_hash<T>::call(val);
- }
-#endif
- };
- };
-
-#else // Visual C++ 6.5
-
- // There's probably a more elegant way to Visual C++ 6.5 to work
- // but I don't know what it is.
-
- template <bool IsConst>
- struct hash_impl_msvc
- {
- template <class T>
- struct inner
- : public std::unary_function<T, std::size_t>
- {
- std::size_t operator()(T const& val) const
- {
- return hash_detail::call_hash<T const>::call(val);
- }
-
- std::size_t operator()(T& val) const
- {
- return hash_detail::call_hash<T>::call(val);
- }
- };
- };
-
- template <>
- struct hash_impl_msvc<true>
- {
- template <class T>
- struct inner
- : public std::unary_function<T, std::size_t>
- {
- std::size_t operator()(T& val) const
- {
- return hash_detail::call_hash<T>::call(val);
- }
- };
- };
-
- template <class T>
- struct hash_impl_msvc2
- : public hash_impl_msvc<boost::is_const<T>::value>
- ::BOOST_NESTED_TEMPLATE inner<T> {};
-
- template <>
- struct hash_impl<false>
- {
- template <class T>
- struct inner : public hash_impl_msvc2<T> {};
- };
-
-#endif // Visual C++ 6.5
- }
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-}
-
+#include <boost/functional/hash/extensions.hpp>
 #endif
-

Modified: branches/proto/v3/boost/functional/hash/list.hpp
==============================================================================
--- branches/proto/v3/boost/functional/hash/list.hpp (original)
+++ branches/proto/v3/boost/functional/hash/list.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/boost/functional/hash/map.hpp
==============================================================================
--- branches/proto/v3/boost/functional/hash/map.hpp (original)
+++ branches/proto/v3/boost/functional/hash/map.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/boost/functional/hash/pair.hpp
==============================================================================
--- branches/proto/v3/boost/functional/hash/pair.hpp (original)
+++ branches/proto/v3/boost/functional/hash/pair.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/boost/functional/hash/set.hpp
==============================================================================
--- branches/proto/v3/boost/functional/hash/set.hpp (original)
+++ branches/proto/v3/boost/functional/hash/set.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/boost/functional/hash/vector.hpp
==============================================================================
--- branches/proto/v3/boost/functional/hash/vector.hpp (original)
+++ branches/proto/v3/boost/functional/hash/vector.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/boost/functional/hash_fwd.hpp
==============================================================================
--- branches/proto/v3/boost/functional/hash_fwd.hpp (original)
+++ branches/proto/v3/boost/functional/hash_fwd.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/boost/mpl/aux_/preprocessor/is_seq.hpp
==============================================================================
--- branches/proto/v3/boost/mpl/aux_/preprocessor/is_seq.hpp (original)
+++ branches/proto/v3/boost/mpl/aux_/preprocessor/is_seq.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -27,7 +27,7 @@
 // BOOST_PP_ASSERT( BOOST_MPL_PP_IS_SEQ( (int) ) )
 // BOOST_PP_ASSERT( BOOST_MPL_PP_IS_SEQ( (1)(2) ) )
 
-#if BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_BCC()
+#if (BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_BCC()) || defined(_MSC_VER) && defined(__INTEL_COMPILER) && __INTEL_COMPILER == 1010
 
 # define BOOST_MPL_PP_IS_SEQ(seq) BOOST_PP_DEC( BOOST_PP_SEQ_SIZE( BOOST_MPL_PP_IS_SEQ_(seq) ) )
 # define BOOST_MPL_PP_IS_SEQ_(seq) BOOST_MPL_PP_IS_SEQ_SEQ_( BOOST_MPL_PP_IS_SEQ_SPLIT_ seq )

Modified: branches/proto/v3/boost/shared_ptr.hpp
==============================================================================
--- branches/proto/v3/boost/shared_ptr.hpp (original)
+++ branches/proto/v3/boost/shared_ptr.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -261,7 +261,7 @@
 
 // constructor that doesn't trigger enable_shared_from_this code, needed
 // for enable_shared_from_this internal implementation
- template<class Y, class D> shared_ptr(Y * p, D d, detail::ignore_enable_shared_from_this_tag tag):
+ template<class Y, class D> shared_ptr(Y * p, D d, detail::ignore_enable_shared_from_this_tag):
       px(p), pn(p, d)
     {}
 

Modified: branches/proto/v3/boost/static_warning.hpp
==============================================================================
--- branches/proto/v3/boost/static_warning.hpp (original)
+++ branches/proto/v3/boost/static_warning.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -76,9 +76,10 @@
 # endif
 
 //------------------Configure-------------------------------------------------//
-
 # if defined(__BORLANDC__) && (__BORLANDC__ >= 0x600)
 # define BOOST_HAS_DESCRIPTIVE_UNREFERENCED_VARIABLE_WARNING
+# elif defined(__PGI)
+# define BOOST_HAS_DESCRIPTIVE_DIVIDE_BY_ZERO_WARNING
 # elif defined(__GNUC__) && !defined(BOOST_INTEL) // && (__GNUC__ * 100 + __GNUC_MINOR__ <= 302)
 # define BOOST_HAS_DESCRIPTIVE_DIVIDE_BY_ZERO_WARNING
 # elif defined(__DECCXX) // for Tru64
@@ -87,7 +88,7 @@
 # define BOOST_HAS_DESCRIPTIVE_RETURNING_ADDRESS_OF_TEMPORARY_WARNING
 # elif defined(BOOST_MSVC) // && (BOOST_MSVC < 1300)
 # define BOOST_NO_PREDEFINED_LINE_MACRO
-# pragma warning(disable:4094) // C4094: untagged 'stuct' declared no symbols
+# pragma warning(disable:4094) // C4094: untagged 'struct' declared no symbols
 #endif
 
 //------------------Helper templates------------------------------------------//

Modified: branches/proto/v3/boost/thread/detail/tss_hooks.hpp
==============================================================================
--- branches/proto/v3/boost/thread/detail/tss_hooks.hpp (original)
+++ branches/proto/v3/boost/thread/detail/tss_hooks.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -59,7 +59,7 @@
             //a method for doing so has been discovered.
         //May be omitted; may be called multiple times.
 
- extern "C" BOOST_THREAD_DECL void on_thread_exit(void);
+ extern "C" BOOST_THREAD_DECL void __cdecl on_thread_exit(void);
         //Function to be called just be fore a thread ends
             //in an exe or dll that uses Boost.Threads.
         //Must be called in the context of the thread

Modified: branches/proto/v3/boost/thread/locks.hpp
==============================================================================
--- branches/proto/v3/boost/thread/locks.hpp (original)
+++ branches/proto/v3/boost/thread/locks.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -27,9 +27,6 @@
     class shared_lock;
 
     template<typename Mutex>
- class exclusive_lock;
-
- template<typename Mutex>
     class upgrade_lock;
 
     template<typename Mutex>

Modified: branches/proto/v3/boost/unordered/detail/allocator.hpp
==============================================================================
--- branches/proto/v3/boost/unordered/detail/allocator.hpp (original)
+++ branches/proto/v3/boost/unordered/detail/allocator.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/boost/unordered/detail/hash_table.hpp
==============================================================================
--- branches/proto/v3/boost/unordered/detail/hash_table.hpp (original)
+++ branches/proto/v3/boost/unordered/detail/hash_table.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,6 +1,6 @@
 
 // Copyright (C) 2003-2004 Jeremy B. Maitin-Shepard.
-// Copyright (C) 2005-2007 Daniel James
+// Copyright (C) 2005-2008 Daniel James
 // 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)
 

Modified: branches/proto/v3/boost/unordered/detail/hash_table_impl.hpp
==============================================================================
--- branches/proto/v3/boost/unordered/detail/hash_table_impl.hpp (original)
+++ branches/proto/v3/boost/unordered/detail/hash_table_impl.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,6 +1,6 @@
 
 // Copyright (C) 2003-2004 Jeremy B. Maitin-Shepard.
-// Copyright (C) 2005-2007 Daniel James
+// Copyright (C) 2005-2008 Daniel James
 // 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)
 
@@ -253,6 +253,7 @@
 
             class iterator_base
             {
+ typedef BOOST_UNORDERED_TABLE_DATA<Alloc> data;
             public:
                 bucket_ptr bucket_;
                 link_ptr node_;

Modified: branches/proto/v3/boost/unordered_map.hpp
==============================================================================
--- branches/proto/v3/boost/unordered_map.hpp (original)
+++ branches/proto/v3/boost/unordered_map.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,6 +1,6 @@
 
 // Copyright (C) 2003-2004 Jeremy B. Maitin-Shepard.
-// Copyright (C) 2005-2007 Daniel James.
+// Copyright (C) 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/boost/unordered_set.hpp
==============================================================================
--- branches/proto/v3/boost/unordered_set.hpp (original)
+++ branches/proto/v3/boost/unordered_set.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,6 +1,6 @@
 
 // Copyright (C) 2003-2004 Jeremy B. Maitin-Shepard.
-// Copyright (C) 2005-2007 Daniel James.
+// Copyright (C) 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/boost/wave/util/flex_string.hpp
==============================================================================
--- branches/proto/v3/boost/wave/util/flex_string.hpp (original)
+++ branches/proto/v3/boost/wave/util/flex_string.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -705,8 +705,8 @@
 
         if (capacity() < neededCapacity)
         {
- typedef std::less_equal<const E*> le_type;
- BOOST_ASSERT(!(le_type()(begin(), &*b) && le_type()(&*b, end())));
+// typedef std::less_equal<const E*> le_type;
+// BOOST_ASSERT(!(le_type()(begin(), &*b) && le_type()(&*b, end())));
             reserve(neededCapacity);
         }
         std::copy(b, e, end());

Modified: branches/proto/v3/boost/xpressive/proto/detail/fun_call_ex.hpp
==============================================================================
--- branches/proto/v3/boost/xpressive/proto/detail/fun_call_ex.hpp (original)
+++ branches/proto/v3/boost/xpressive/proto/detail/fun_call_ex.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -61,7 +61,7 @@
 
     #define C1 const
 
- #define BOOST_PP_ITERATION_PARAMS_1 (3, (1, BOOST_PP_DEC(BOOST_PROTO_MAX_ARITY), <boost/xpressive/proto/detail/fun_call_ex.hpp>))
+ #define BOOST_PP_ITERATION_PARAMS_1 (3, (1, BOOST_PP_DEC(BOOST_PROTO_MAX_FUNCTION_CALL_ARITY), <boost/xpressive/proto/detail/fun_call_ex.hpp>))
     #include BOOST_PP_ITERATE()
 
     #undef C0

Modified: branches/proto/v3/boost/xpressive/proto/extends.hpp
==============================================================================
--- branches/proto/v3/boost/xpressive/proto/extends.hpp (original)
+++ branches/proto/v3/boost/xpressive/proto/extends.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -222,7 +222,7 @@
         /// INTERNAL ONLY
         ///
     #define BOOST_PROTO_EXTENDS_FUNCTION_IMPL_3(R, STATE) \
- BOOST_PP_NOT_EQUAL(BOOST_PROTO_MAX_ARITY, BOOST_PP_SEQ_SIZE(STATE))
+ BOOST_PP_NOT_EQUAL(BOOST_PROTO_MAX_FUNCTION_CALL_ARITY, BOOST_PP_SEQ_SIZE(STATE))
 
         /// INTERNAL ONLY
         ///

Modified: branches/proto/v3/boost/xpressive/proto/proto_fwd.hpp
==============================================================================
--- branches/proto/v3/boost/xpressive/proto/proto_fwd.hpp (original)
+++ branches/proto/v3/boost/xpressive/proto/proto_fwd.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -27,6 +27,14 @@
 # define BOOST_PROTO_MAX_LOGICAL_ARITY 8
 #endif
 
+#ifndef BOOST_PROTO_MAX_FUNCTION_CALL_ARITY
+# define BOOST_PROTO_MAX_FUNCTION_CALL_ARITY BOOST_PROTO_MAX_ARITY
+#endif
+
+#if BOOST_PROTO_MAX_FUNCTION_CALL_ARITY > BOOST_PROTO_MAX_ARITY
+# error BOOST_PROTO_MAX_FUNCTION_CALL_ARITY cannot be larger than BOOST_PROTO_MAX_ARITY
+#endif
+
 #if BOOST_WORKAROUND(__GNUC__, == 3) \
  || BOOST_WORKAROUND(__EDG_VERSION__, BOOST_TESTED_AT(306))
 # define BOOST_PROTO_BROKEN_CONST_OVERLOADS

Modified: branches/proto/v3/libs/function/doc/history.xml
==============================================================================
--- branches/proto/v3/libs/function/doc/history.xml (original)
+++ branches/proto/v3/libs/function/doc/history.xml 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -13,6 +13,22 @@
 
 <itemizedlist spacing="compact">
 
+ <listitem><para><bold>Version 1.36.0</bold>: </para>
+ <itemizedlist spacing="compact">
+ <listitem><para>Boost.Function now implements allocator support
+ in the same way that is is provided in C++0x, based on C++
+ committee
+ proposal <ulink url="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2308.html">N2308</ulink>. This
+ change removes the <computeroutput>Allocator</computeroutput>
+ template parameter of <classname>boost::function</classname> in
+ favor of a constructor that takes an argument. While this is a
+ backward-incompatible change, it is likely to affect only a few
+ users. This change to Function was contributed by Emil
+ Dotchevski, which also authored the corresponding C++ committee
+ proposal.</para></listitem>
+ </itemizedlist>
+ </listitem>
+
   <listitem><para><bold>Version 1.34.0</bold>: </para>
     <itemizedlist spacing="compact">
       <listitem><para>Boost.Function now implements a small buffer optimization, which can drastically improve the performance when copying or construction Boost.Function objects storing small function objects. For instance, <code>bind(&amp;X:foo, &amp;x, _1, _2)</code> requires no heap allocation when placed into a Boost.Function object. Note that some exception-safety guarantees have changed: assignment provides the basic exception guarantee and <code>swap()</code> may throw.</para></listitem>

Modified: branches/proto/v3/libs/function/doc/reference.xml
==============================================================================
--- branches/proto/v3/libs/function/doc/reference.xml (original)
+++ branches/proto/v3/libs/function/doc/reference.xml 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -141,9 +141,6 @@
       <template-type-parameter name="T2"/>
       <template-varargs/>
       <template-type-parameter name="TN"/>
- <template-type-parameter name="Allocator">
- <default><classname>std::allocator</classname>&lt;void&gt;</default>
- </template-type-parameter>
     </template>
 
     <inherit access="public"><classname>function_base</classname></inherit>
@@ -160,7 +157,6 @@
     </description>
 
     <typedef name="result_type"><type>R</type></typedef>
- <typedef name="allocator_type"><type>Allocator</type></typedef>
     <typedef name="argument_type">
       <type>T1</type><purpose>If N == 1</purpose>
     </typedef>
@@ -216,6 +212,19 @@
       <postconditions><simpara><code>*this</code> targets a copy of <code>f</code> if <code>f</code> is nonempty, or <code>this-&gt;<methodname>empty</methodname>()</code> if <code>f</code> is empty.</simpara></postconditions>
     </constructor>
 
+ <constructor>
+ <template>
+ <template-type-parameter name="F"/>
+ <template-type-parameter name="Allocator"/>
+ </template>
+ <parameter name="f"><paramtype>F</paramtype></parameter>
+ <parameter name="alloc"><paramtype>Allocator</paramtype></parameter>
+ <requires><simpara>F is a function object Callable from <code>this</code>, Allocator is an allocator. The copy constructor and destructor of Allocator shall not throw.</simpara></requires>
+ <postconditions><simpara><code>*this</code> targets a copy of <code>f</code> if <code>f</code> is nonempty, or <code>this-&gt;<methodname>empty</methodname>()</code> if <code>f</code> is empty.</simpara></postconditions>
+
+ <effects><simpara>If memory allocation is required, the given allocator (or a copy of it) will be used to allocate that memory.</simpara></effects>
+ </constructor>
+
     <destructor>
       <effects><simpara>If <code>!this-&gt;<methodname>empty</methodname>()</code>, destroys the target of this.</simpara></effects>
 
@@ -324,11 +333,10 @@
           <template-type-parameter name="T2"/>
           <template-varargs/>
           <template-type-parameter name="TN"/>
- <template-type-parameter name="Allocator"/>
         </template>
         <type>void</type>
- <parameter name="f1"><paramtype><classname>functionN</classname>&lt;T1, T2, ..., TN, Allocator&gt;&amp;</paramtype></parameter>
- <parameter name="f2"><paramtype><classname>functionN</classname>&lt;T1, T2, ..., TN, Allocator&gt;&amp;</paramtype></parameter>
+ <parameter name="f1"><paramtype><classname>functionN</classname>&lt;T1, T2, ..., TN&gt;&amp;</paramtype></parameter>
+ <parameter name="f2"><paramtype><classname>functionN</classname>&lt;T1, T2, ..., TN&gt;&amp;</paramtype></parameter>
         <effects><simpara><code>f1.<methodname>swap</methodname>(f2)</code></simpara></effects>
       </function>
     </free-function-group>
@@ -341,11 +349,10 @@
             <template-type-parameter name="T2"/>
             <template-varargs/>
             <template-type-parameter name="TN"/>
- <template-type-parameter name="Allocator"/>
             <template-type-parameter name="Functor"/>
           </template>
           <type>bool</type>
- <parameter name="f"><paramtype>const <classname>functionN</classname>&lt;T1, T2, ..., TN, Allocator&gt;&amp;</paramtype></parameter>
+ <parameter name="f"><paramtype>const <classname>functionN</classname>&lt;T1, T2, ..., TN&gt;&amp;</paramtype></parameter>
           <parameter name="g"><paramtype>Functor</paramtype></parameter>
         </signature>
         <signature>
@@ -354,12 +361,11 @@
             <template-type-parameter name="T2"/>
             <template-varargs/>
             <template-type-parameter name="TN"/>
- <template-type-parameter name="Allocator"/>
             <template-type-parameter name="Functor"/>
           </template>
           <type>bool</type>
           <parameter name="g"><paramtype>Functor</paramtype></parameter>
- <parameter name="f"><paramtype>const <classname>functionN</classname>&lt;T1, T2, ..., TN, Allocator&gt;&amp;</paramtype></parameter>
+ <parameter name="f"><paramtype>const <classname>functionN</classname>&lt;T1, T2, ..., TN&gt;&amp;</paramtype></parameter>
         </signature>
         <signature>
           <template>
@@ -367,11 +373,10 @@
             <template-type-parameter name="T2"/>
             <template-varargs/>
             <template-type-parameter name="TN"/>
- <template-type-parameter name="Allocator"/>
             <template-type-parameter name="Functor"/>
           </template>
           <type>bool</type>
- <parameter name="f"><paramtype>const <classname>functionN</classname>&lt;T1, T2, ..., TN, Allocator&gt;&amp;</paramtype></parameter>
+ <parameter name="f"><paramtype>const <classname>functionN</classname>&lt;T1, T2, ..., TN&gt;&amp;</paramtype></parameter>
           <parameter name="g"><paramtype><classname>reference_wrapper</classname>&lt;Functor&gt;</paramtype></parameter>
         </signature>
         <signature>
@@ -380,12 +385,11 @@
             <template-type-parameter name="T2"/>
             <template-varargs/>
             <template-type-parameter name="TN"/>
- <template-type-parameter name="Allocator"/>
             <template-type-parameter name="Functor"/>
           </template>
           <type>bool</type>
           <parameter name="g"><paramtype><classname>reference_wrapper</classname>&lt;Functor&gt;</paramtype></parameter>
- <parameter name="f"><paramtype>const <classname>functionN</classname>&lt;T1, T2, ..., TN, Allocator&gt;&amp;</paramtype></parameter>
+ <parameter name="f"><paramtype>const <classname>functionN</classname>&lt;T1, T2, ..., TN&gt;&amp;</paramtype></parameter>
         </signature>
         <signature>
           <template>
@@ -393,16 +397,14 @@
             <template-type-parameter name="T2"/>
             <template-varargs/>
             <template-type-parameter name="TN"/>
- <template-type-parameter name="Allocator1"/>
             <template-type-parameter name="U1"/>
             <template-type-parameter name="U2"/>
             <template-varargs/>
             <template-type-parameter name="UN"/>
- <template-type-parameter name="Allocator2"/>
           </template>
           <type>void</type>
- <parameter name="f1"><paramtype>const <classname>functionN</classname>&lt;T1, T2, ..., TN, Allocator1&gt;&amp;</paramtype></parameter>
- <parameter name="f2"><paramtype>const <classname>functionN</classname>&lt;U1, U2, ..., UN, Allocator2&gt;&amp;</paramtype></parameter>
+ <parameter name="f1"><paramtype>const <classname>functionN</classname>&lt;T1, T2, ..., TN&gt;&amp;</paramtype></parameter>
+ <parameter name="f2"><paramtype>const <classname>functionN</classname>&lt;U1, U2, ..., UN&gt;&amp;</paramtype></parameter>
         </signature>
 
         <returns><simpara>True when <code>f</code> stores an object of
@@ -442,11 +444,10 @@
             <template-type-parameter name="T2"/>
             <template-varargs/>
             <template-type-parameter name="TN"/>
- <template-type-parameter name="Allocator"/>
             <template-type-parameter name="Functor"/>
           </template>
           <type>bool</type>
- <parameter name="f"><paramtype>const <classname>functionN</classname>&lt;T1, T2, ..., TN, Allocator&gt;&amp;</paramtype></parameter>
+ <parameter name="f"><paramtype>const <classname>functionN</classname>&lt;T1, T2, ..., TN&gt;&amp;</paramtype></parameter>
           <parameter name="g"><paramtype>Functor</paramtype></parameter>
         </signature>
         <signature>
@@ -455,12 +456,11 @@
             <template-type-parameter name="T2"/>
             <template-varargs/>
             <template-type-parameter name="TN"/>
- <template-type-parameter name="Allocator"/>
             <template-type-parameter name="Functor"/>
           </template>
           <type>bool</type>
           <parameter name="g"><paramtype>Functor</paramtype></parameter>
- <parameter name="f"><paramtype>const <classname>functionN</classname>&lt;T1, T2, ..., TN, Allocator&gt;&amp;</paramtype></parameter>
+ <parameter name="f"><paramtype>const <classname>functionN</classname>&lt;T1, T2, ..., TN&gt;&amp;</paramtype></parameter>
         </signature>
         <signature>
           <template>
@@ -468,11 +468,10 @@
             <template-type-parameter name="T2"/>
             <template-varargs/>
             <template-type-parameter name="TN"/>
- <template-type-parameter name="Allocator"/>
             <template-type-parameter name="Functor"/>
           </template>
           <type>bool</type>
- <parameter name="f"><paramtype>const <classname>functionN</classname>&lt;T1, T2, ..., TN, Allocator&gt;&amp;</paramtype></parameter>
+ <parameter name="f"><paramtype>const <classname>functionN</classname>&lt;T1, T2, ..., TN&gt;&amp;</paramtype></parameter>
           <parameter name="g"><paramtype><classname>reference_wrapper</classname>&lt;Functor&gt;</paramtype></parameter>
         </signature>
         <signature>
@@ -481,12 +480,11 @@
             <template-type-parameter name="T2"/>
             <template-varargs/>
             <template-type-parameter name="TN"/>
- <template-type-parameter name="Allocator"/>
             <template-type-parameter name="Functor"/>
           </template>
           <type>bool</type>
           <parameter name="g"><paramtype><classname>reference_wrapper</classname>&lt;Functor&gt;</paramtype></parameter>
- <parameter name="f"><paramtype>const <classname>functionN</classname>&lt;T1, T2, ..., TN, Allocator&gt;&amp;</paramtype></parameter>
+ <parameter name="f"><paramtype>const <classname>functionN</classname>&lt;T1, T2, ..., TN&gt;&amp;</paramtype></parameter>
         </signature>
         <signature>
           <template>
@@ -494,16 +492,14 @@
             <template-type-parameter name="T2"/>
             <template-varargs/>
             <template-type-parameter name="TN"/>
- <template-type-parameter name="Allocator1"/>
             <template-type-parameter name="U1"/>
             <template-type-parameter name="U2"/>
             <template-varargs/>
             <template-type-parameter name="UN"/>
- <template-type-parameter name="Allocator2"/>
           </template>
           <type>void</type>
- <parameter name="f1"><paramtype>const <classname>functionN</classname>&lt;T1, T2, ..., TN, Allocator1&gt;&amp;</paramtype></parameter>
- <parameter name="f2"><paramtype>const <classname>functionN</classname>&lt;U1, U2, ..., UN, Allocator2&gt;&amp;</paramtype></parameter>
+ <parameter name="f1"><paramtype>const <classname>functionN</classname>&lt;T1, T2, ..., TN&gt;&amp;</paramtype></parameter>
+ <parameter name="f2"><paramtype>const <classname>functionN</classname>&lt;U1, U2, ..., UN&gt;&amp;</paramtype></parameter>
         </signature>
 
         <returns><simpara>True when <code>f</code> does not store an
@@ -543,11 +539,8 @@
       <template-type-parameter name="Signature">
         <purpose>Function type R (T1, T2, ..., TN)</purpose>
       </template-type-parameter>
- <template-type-parameter name="Allocator">
- <default><classname>std::allocator</classname>&lt;void&gt;</default>
- </template-type-parameter>
     </template>
- <inherit access="public"><classname>functionN</classname>&lt;R, T1, T2, ..., TN, Allocator&gt;</inherit>
+ <inherit access="public"><classname>functionN</classname>&lt;R, T1, T2, ..., TN&gt;</inherit>
 
     <purpose>A generalized function pointer that can be used for
     callbacks or wrapping function objects.</purpose>
@@ -569,7 +562,6 @@
     </description>
 
     <typedef name="result_type"><type>R</type></typedef>
- <typedef name="allocator_type"><type>Allocator</type></typedef>
     <typedef name="argument_type">
       <type>T1</type><purpose>If N == 1</purpose>
     </typedef>
@@ -633,6 +625,19 @@
       <postconditions><simpara><code>*this</code> targets a copy of <code>f</code> if <code>f</code> is nonempty, or <code>this-&gt;<methodname>empty</methodname>()</code> if <code>f</code> is empty.</simpara></postconditions>
     </constructor>
 
+ <constructor>
+ <template>
+ <template-type-parameter name="F"/>
+ <template-type-parameter name="Allocator"/>
+ </template>
+ <parameter name="f"><paramtype>F</paramtype></parameter>
+ <parameter name="alloc"><paramtype>Allocator</paramtype></parameter>
+ <requires><simpara>F is a function object Callable from <code>this</code>, Allocator is an allocator. The copy constructor and destructor of Allocator shall not throw.</simpara></requires>
+ <postconditions><simpara><code>*this</code> targets a copy of <code>f</code> if <code>f</code> is nonempty, or <code>this-&gt;<methodname>empty</methodname>()</code> if <code>f</code> is empty.</simpara></postconditions>
+
+ <effects><simpara>If memory allocation is required, the given allocator (or a copy of it) will be used to allocate that memory.</simpara></effects>
+ </constructor>
+
     <destructor>
       <effects><simpara>If <code>!this-&gt;<methodname>empty</methodname>()</code>, destroys the target of <code>this</code>.</simpara></effects>
 
@@ -745,11 +750,10 @@
       <function name="swap">
         <template>
           <template-type-parameter name="Signature"/>
- <template-type-parameter name="Allocator"/>
         </template>
         <type>void</type>
- <parameter name="f1"><paramtype><classname>function</classname>&lt;Signature, Allocator&gt;&amp;</paramtype></parameter>
- <parameter name="f2"><paramtype><classname>function</classname>&lt;Signature, Allocator&gt;&amp;</paramtype></parameter>
+ <parameter name="f1"><paramtype><classname>function</classname>&lt;Signature&gt;&amp;</paramtype></parameter>
+ <parameter name="f2"><paramtype><classname>function</classname>&lt;Signature&gt;&amp;</paramtype></parameter>
         <effects><simpara><code>f1.<methodname>swap</methodname>(f2)</code></simpara></effects>
       </function>
     </free-function-group>
@@ -759,53 +763,47 @@
         <signature>
           <template>
             <template-type-parameter name="Signature"/>
- <template-type-parameter name="Allocator"/>
             <template-type-parameter name="Functor"/>
           </template>
           <type>bool</type>
- <parameter name="f"><paramtype>const <classname>function</classname>&lt;Signature, Allocator&gt;&amp;</paramtype></parameter>
+ <parameter name="f"><paramtype>const <classname>function</classname>&lt;Signature&gt;&amp;</paramtype></parameter>
           <parameter name="g"><paramtype>Functor</paramtype></parameter>
         </signature>
         <signature>
           <template>
             <template-type-parameter name="Signature"/>
- <template-type-parameter name="Allocator"/>
             <template-type-parameter name="Functor"/>
           </template>
           <type>bool</type>
           <parameter name="g"><paramtype>Functor</paramtype></parameter>
- <parameter name="f"><paramtype>const <classname>function</classname>&lt;Signature, Allocator&gt;&amp;</paramtype></parameter>
+ <parameter name="f"><paramtype>const <classname>function</classname>&lt;Signature&gt;&amp;</paramtype></parameter>
         </signature>
         <signature>
           <template>
             <template-type-parameter name="Signature"/>
- <template-type-parameter name="Allocator"/>
             <template-type-parameter name="Functor"/>
           </template>
           <type>bool</type>
- <parameter name="f"><paramtype>const <classname>function</classname>&lt;Signature, Allocator&gt;&amp;</paramtype></parameter>
+ <parameter name="f"><paramtype>const <classname>function</classname>&lt;Signature&gt;&amp;</paramtype></parameter>
           <parameter name="g"><paramtype><classname>reference_wrapper</classname>&lt;Functor&gt;</paramtype></parameter>
         </signature>
         <signature>
           <template>
             <template-type-parameter name="Signature"/>
- <template-type-parameter name="Allocator"/>
             <template-type-parameter name="Functor"/>
           </template>
           <type>bool</type>
           <parameter name="g"><paramtype><classname>reference_wrapper</classname>&lt;Functor&gt;</paramtype></parameter>
- <parameter name="f"><paramtype>const <classname>function</classname>&lt;Signature, Allocator&gt;&amp;</paramtype></parameter>
+ <parameter name="f"><paramtype>const <classname>function</classname>&lt;Signature&gt;&amp;</paramtype></parameter>
         </signature>
         <signature>
           <template>
             <template-type-parameter name="Signature1"/>
- <template-type-parameter name="Allocator1"/>
             <template-type-parameter name="Signature2"/>
- <template-type-parameter name="Allocator2"/>
           </template>
           <type>void</type>
- <parameter name="f1"><paramtype>const <classname>function</classname>&lt;Signature1, Allocator1&gt;&amp;</paramtype></parameter>
- <parameter name="f2"><paramtype>const <classname>function</classname>&lt;Signature2, Allocator2&gt;&amp;</paramtype></parameter>
+ <parameter name="f1"><paramtype>const <classname>function</classname>&lt;Signature1&gt;&amp;</paramtype></parameter>
+ <parameter name="f2"><paramtype>const <classname>function</classname>&lt;Signature2&gt;&amp;</paramtype></parameter>
         </signature>
 
         <returns><simpara>True when <code>f</code> stores an object of
@@ -840,53 +838,47 @@
         <signature>
           <template>
             <template-type-parameter name="Signature"/>
- <template-type-parameter name="Allocator"/>
             <template-type-parameter name="Functor"/>
           </template>
           <type>bool</type>
- <parameter name="f"><paramtype>const <classname>function</classname>&lt;Signature, Allocator&gt;&amp;</paramtype></parameter>
+ <parameter name="f"><paramtype>const <classname>function</classname>&lt;Signature&gt;&amp;</paramtype></parameter>
           <parameter name="g"><paramtype>Functor</paramtype></parameter>
         </signature>
         <signature>
           <template>
             <template-type-parameter name="Signature"/>
- <template-type-parameter name="Allocator"/>
             <template-type-parameter name="Functor"/>
           </template>
           <type>bool</type>
           <parameter name="g"><paramtype>Functor</paramtype></parameter>
- <parameter name="f"><paramtype>const <classname>function</classname>&lt;Signature, Allocator&gt;&amp;</paramtype></parameter>
+ <parameter name="f"><paramtype>const <classname>function</classname>&lt;Signature&gt;&amp;</paramtype></parameter>
         </signature>
         <signature>
           <template>
             <template-type-parameter name="Signature"/>
- <template-type-parameter name="Allocator"/>
             <template-type-parameter name="Functor"/>
           </template>
           <type>bool</type>
- <parameter name="f"><paramtype>const <classname>function</classname>&lt;Signature, Allocator&gt;&amp;</paramtype></parameter>
+ <parameter name="f"><paramtype>const <classname>function</classname>&lt;Signature&gt;&amp;</paramtype></parameter>
           <parameter name="g"><paramtype><classname>reference_wrapper</classname>&lt;Functor&gt;</paramtype></parameter>
         </signature>
         <signature>
           <template>
             <template-type-parameter name="Signature"/>
- <template-type-parameter name="Allocator"/>
             <template-type-parameter name="Functor"/>
           </template>
           <type>bool</type>
           <parameter name="g"><paramtype><classname>reference_wrapper</classname>&lt;Functor&gt;</paramtype></parameter>
- <parameter name="f"><paramtype>const <classname>function</classname>&lt;Signature, Allocator&gt;&amp;</paramtype></parameter>
+ <parameter name="f"><paramtype>const <classname>function</classname>&lt;Signature&gt;&amp;</paramtype></parameter>
         </signature>
         <signature>
           <template>
             <template-type-parameter name="Signature1"/>
- <template-type-parameter name="Allocator1"/>
             <template-type-parameter name="Signature2"/>
- <template-type-parameter name="Allocator2"/>
           </template>
           <type>void</type>
- <parameter name="f1"><paramtype>const <classname>function</classname>&lt;Signature1, Allocator1&gt;&amp;</paramtype></parameter>
- <parameter name="f2"><paramtype>const <classname>function</classname>&lt;Signature2, Allocator2&gt;&amp;</paramtype></parameter>
+ <parameter name="f1"><paramtype>const <classname>function</classname>&lt;Signature1&gt;&amp;</paramtype></parameter>
+ <parameter name="f2"><paramtype>const <classname>function</classname>&lt;Signature2&gt;&amp;</paramtype></parameter>
         </signature>
 
         <returns><simpara>True when <code>f</code> does not store an

Modified: branches/proto/v3/libs/function/test/allocator_test.cpp
==============================================================================
--- branches/proto/v3/libs/function/test/allocator_test.cpp (original)
+++ branches/proto/v3/libs/function/test/allocator_test.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -27,6 +27,14 @@
     typedef counting_allocator<U> other;
   };
 
+ counting_allocator()
+ {
+ }
+
+ template<typename U>
+ counting_allocator( counting_allocator<U> )
+ {
+ }
 
   T* allocate(std::size_t n)
   {
@@ -41,20 +49,27 @@
   }
 };
 
-struct plus_int
+struct enable_small_object_optimization
 {
- int operator()(int x, int y) const { return x + y; }
+};
 
+struct disable_small_object_optimization
+{
   int unused_state_data[32];
 };
 
+template <typename base>
+struct plus_int: base
+{
+ int operator()(int x, int y) const { return x + y; }
+};
+
 static int do_minus(int x, int y) { return x-y; }
 
-struct DoNothing
+template <typename base>
+struct DoNothing: base
 {
   void operator()() const {}
-
- int unused_state_data[32];
 };
 
 static void do_nothing() {}
@@ -62,33 +77,57 @@
 int
 test_main(int, char*[])
 {
- function2<int, int, int, counting_allocator<int> > f;
- f = plus_int();
+ function2<int, int, int> f;
+ f.assign( plus_int<disable_small_object_optimization>(), counting_allocator<int>() );
   f.clear();
   BOOST_CHECK(alloc_count == 1);
   BOOST_CHECK(dealloc_count == 1);
+ alloc_count = 0;
+ dealloc_count = 0;
+ f.assign( plus_int<enable_small_object_optimization>(), counting_allocator<int>() );
+ f.clear();
+ BOOST_CHECK(alloc_count == 0);
+ BOOST_CHECK(dealloc_count == 0);
+ f.assign( plus_int<disable_small_object_optimization>(), std::allocator<int>() );
+ f.clear();
+ f.assign( plus_int<enable_small_object_optimization>(), std::allocator<int>() );
+ f.clear();
 
   alloc_count = 0;
   dealloc_count = 0;
- f = &do_minus;
+ f.assign( &do_minus, counting_allocator<int>() );
   f.clear();
   BOOST_CHECK(alloc_count == 0);
   BOOST_CHECK(dealloc_count == 0);
+ f.assign( &do_minus, std::allocator<int>() );
+ f.clear();
 
- function0<void, counting_allocator<int> > fv;
+ function0<void> fv;
   alloc_count = 0;
   dealloc_count = 0;
- fv = DoNothing();
+ fv.assign( DoNothing<disable_small_object_optimization>(), counting_allocator<int>() );
   fv.clear();
   BOOST_CHECK(alloc_count == 1);
   BOOST_CHECK(dealloc_count == 1);
+ alloc_count = 0;
+ dealloc_count = 0;
+ fv.assign( DoNothing<enable_small_object_optimization>(), counting_allocator<int>() );
+ fv.clear();
+ BOOST_CHECK(alloc_count == 0);
+ BOOST_CHECK(dealloc_count == 0);
+ fv.assign( DoNothing<disable_small_object_optimization>(), std::allocator<int>() );
+ fv.clear();
+ fv.assign( DoNothing<enable_small_object_optimization>(), std::allocator<int>() );
+ fv.clear();
 
   alloc_count = 0;
   dealloc_count = 0;
- fv = &do_nothing;
+ fv.assign( &do_nothing, counting_allocator<int>() );
   fv.clear();
   BOOST_CHECK(alloc_count == 0);
   BOOST_CHECK(dealloc_count == 0);
+ fv.assign( &do_nothing, std::allocator<int>() );
+ fv.clear();
 
   return 0;
 }

Modified: branches/proto/v3/libs/functional/hash/doc/Jamfile.v2
==============================================================================
--- branches/proto/v3/libs/functional/hash/doc/Jamfile.v2 (original)
+++ branches/proto/v3/libs/functional/hash/doc/Jamfile.v2 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-# Copyright 2005-2007 Daniel James.
+# Copyright 2005-2008 Daniel James.
 # 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)
 
@@ -12,4 +12,15 @@
     <xsl:param>chunk.section.depth=2
     <xsl:param>generate.section.toc.level=2
     <xsl:param>toc.section.depth=1
- <xsl:param>toc.max.depth=1 ;
+ <xsl:param>toc.max.depth=1
+
+ <dependency>css
+ <dependency>images
+ ;
+
+install css : [ glob $(BOOST_ROOT)/doc/src/*.css ]
+ : <location>html ;
+install images : [ glob $(BOOST_ROOT)/doc/src/images/*.png ]
+ : <location>html/images ;
+explicit css ;
+explicit images ;

Modified: branches/proto/v3/libs/functional/hash/doc/changes.qbk
==============================================================================
--- branches/proto/v3/libs/functional/hash/doc/changes.qbk (original)
+++ branches/proto/v3/libs/functional/hash/doc/changes.qbk 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-[/ Copyright 2005-2007 Daniel James.
+[/ Copyright 2005-2008 Daniel James.
  / 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) ]
 

Modified: branches/proto/v3/libs/functional/hash/doc/disable.qbk
==============================================================================
--- branches/proto/v3/libs/functional/hash/doc/disable.qbk (original)
+++ branches/proto/v3/libs/functional/hash/doc/disable.qbk 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-[/ Copyright 2005-2007 Daniel James.
+[/ Copyright 2005-2008 Daniel James.
  / 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) ]
 

Modified: branches/proto/v3/libs/functional/hash/doc/hash.qbk
==============================================================================
--- branches/proto/v3/libs/functional/hash/doc/hash.qbk (original)
+++ branches/proto/v3/libs/functional/hash/doc/hash.qbk 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,7 +1,7 @@
 [library Boost.Functional/Hash
     [quickbook 1.4]
     [authors [James, Daniel]]
- [copyright 2005 2006 2007 Daniel James]
+ [copyright 2005 2006 2007 2008 Daniel James]
     [purpose A TR1 hash function object that can be extended to hash user
         defined types]
     [category higher-order]

Modified: branches/proto/v3/libs/functional/hash/doc/intro.qbk
==============================================================================
--- branches/proto/v3/libs/functional/hash/doc/intro.qbk (original)
+++ branches/proto/v3/libs/functional/hash/doc/intro.qbk 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-[/ Copyright 2005-2007 Daniel James.
+[/ Copyright 2005-2008 Daniel James.
  / 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) ]
 

Modified: branches/proto/v3/libs/functional/hash/doc/links.qbk
==============================================================================
--- branches/proto/v3/libs/functional/hash/doc/links.qbk (original)
+++ branches/proto/v3/libs/functional/hash/doc/links.qbk 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-[/ Copyright 2005-2007 Daniel James.
+[/ Copyright 2005-2008 Daniel James.
  / 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) ]
 

Modified: branches/proto/v3/libs/functional/hash/doc/portability.qbk
==============================================================================
--- branches/proto/v3/libs/functional/hash/doc/portability.qbk (original)
+++ branches/proto/v3/libs/functional/hash/doc/portability.qbk 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-[/ Copyright 2005-2007 Daniel James.
+[/ Copyright 2005-2008 Daniel James.
  / 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) ]
 

Modified: branches/proto/v3/libs/functional/hash/doc/ref.xml
==============================================================================
--- branches/proto/v3/libs/functional/hash/doc/ref.xml (original)
+++ branches/proto/v3/libs/functional/hash/doc/ref.xml 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,6 +1,6 @@
 
 <!--
-Copyright Daniel James 2005-2007
+Copyright Daniel James 2005-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)
 -->

Modified: branches/proto/v3/libs/functional/hash/doc/thanks.qbk
==============================================================================
--- branches/proto/v3/libs/functional/hash/doc/thanks.qbk (original)
+++ branches/proto/v3/libs/functional/hash/doc/thanks.qbk 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-[/ Copyright 2005-2007 Daniel James.
+[/ Copyright 2005-2008 Daniel James.
  / 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) ]
 

Modified: branches/proto/v3/libs/functional/hash/doc/tutorial.qbk
==============================================================================
--- branches/proto/v3/libs/functional/hash/doc/tutorial.qbk (original)
+++ branches/proto/v3/libs/functional/hash/doc/tutorial.qbk 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-[/ Copyright 2005-2007 Daniel James.
+[/ Copyright 2005-2008 Daniel James.
  / 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) ]
 

Modified: branches/proto/v3/libs/functional/hash/examples/books.cpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/examples/books.cpp (original)
+++ branches/proto/v3/libs/functional/hash/examples/books.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/functional/hash/examples/books.hpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/examples/books.hpp (original)
+++ branches/proto/v3/libs/functional/hash/examples/books.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/functional/hash/examples/portable.cpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/examples/portable.cpp (original)
+++ branches/proto/v3/libs/functional/hash/examples/portable.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/functional/hash/test/Jamfile.v2
==============================================================================
--- branches/proto/v3/libs/functional/hash/test/Jamfile.v2 (original)
+++ branches/proto/v3/libs/functional/hash/test/Jamfile.v2 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-# Copyright 2005-2007 Daniel James.
+# Copyright 2005-2008 Daniel James.
 # 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)
 

Modified: branches/proto/v3/libs/functional/hash/test/compile_time.hpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/test/compile_time.hpp (original)
+++ branches/proto/v3/libs/functional/hash/test/compile_time.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/functional/hash/test/config.hpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/test/config.hpp (original)
+++ branches/proto/v3/libs/functional/hash/test/config.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/functional/hash/test/container_fwd_test.cpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/test/container_fwd_test.cpp (original)
+++ branches/proto/v3/libs/functional/hash/test/container_fwd_test.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/functional/hash/test/hash_built_in_array_test.cpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/test/hash_built_in_array_test.cpp (original)
+++ branches/proto/v3/libs/functional/hash/test/hash_built_in_array_test.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/functional/hash/test/hash_complex_test.cpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/test/hash_complex_test.cpp (original)
+++ branches/proto/v3/libs/functional/hash/test/hash_complex_test.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/functional/hash/test/hash_custom_test.cpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/test/hash_custom_test.cpp (original)
+++ branches/proto/v3/libs/functional/hash/test/hash_custom_test.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/functional/hash/test/hash_deprecated_headers.cpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/test/hash_deprecated_headers.cpp (original)
+++ branches/proto/v3/libs/functional/hash/test/hash_deprecated_headers.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2007 Daniel James.
+// Copyright 2007-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/functional/hash/test/hash_deque_test.cpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/test/hash_deque_test.cpp (original)
+++ branches/proto/v3/libs/functional/hash/test/hash_deque_test.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/functional/hash/test/hash_float_test.cpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/test/hash_float_test.cpp (original)
+++ branches/proto/v3/libs/functional/hash/test/hash_float_test.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/functional/hash/test/hash_float_test.hpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/test/hash_float_test.hpp (original)
+++ branches/proto/v3/libs/functional/hash/test/hash_float_test.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 
@@ -29,12 +29,12 @@
     std::cerr<<"\n"
         <<"Testing " BOOST_STRINGIZE(HASH_NAMESPACE) "::hash<"<<name<<">\n"
         <<"\n"
- <<"std::numeric_limits<T>::digits = "
- <<std::numeric_limits<T>::digits<<"\n"
- <<"std::numeric_limits<int>::digits = "
- <<std::numeric_limits<int>::digits<<"\n"
- <<"std::numeric_limits<std::size_t>::digits = "
- <<std::numeric_limits<std::size_t>::digits<<"\n"
+ <<"boost::hash_detail::limits<T>::digits = "
+ <<boost::hash_detail::limits<T>::digits<<"\n"
+ <<"boost::hash_detail::limits<int>::digits = "
+ <<boost::hash_detail::limits<int>::digits<<"\n"
+ <<"boost::hash_detail::limits<std::size_t>::digits = "
+ <<boost::hash_detail::limits<std::size_t>::digits<<"\n"
         <<"\n"
         ;
 
@@ -55,11 +55,11 @@
 #if defined(__BORLANDC__)
     std::cerr<<"Not running infinity checks on Borland, as it causes it to crash.\n";
 #else
- if(std::numeric_limits<T>::has_infinity) {
+ if(boost::hash_detail::limits<T>::has_infinity) {
         T infinity = -log(zero);
         T infinity2 = (T) 1. / zero;
         T infinity3 = (T) -1. / minus_zero;
- T infinity4 = std::numeric_limits<T>::infinity();
+ T infinity4 = boost::hash_detail::limits<T>::infinity();
 
         T minus_infinity = log(zero);
         T minus_infinity2 = (T) -1. / zero;
@@ -89,26 +89,26 @@
 
         // This should really be 'has_denorm == denorm_present' but some
         // compilers don't have 'denorm_present'. See also a later use.
- if(std::numeric_limits<T>::has_denorm) {
- if(x1(std::numeric_limits<T>::denorm_min()) == x1(infinity)) {
+ if(boost::hash_detail::limits<T>::has_denorm) {
+ if(x1(boost::hash_detail::limits<T>::denorm_min()) == x1(infinity)) {
                 std::cerr<<"x1(denorm_min) == x1(infinity) == "<<x1(infinity)<<"\n";
             }
- if(x1(std::numeric_limits<T>::denorm_min()) == x1(minus_infinity)) {
+ if(x1(boost::hash_detail::limits<T>::denorm_min()) == x1(minus_infinity)) {
                 std::cerr<<"x1(denorm_min) == x1(-infinity) == "<<x1(minus_infinity)<<"\n";
             }
         }
- if(std::numeric_limits<T>::has_quiet_NaN) {
- if(x1(std::numeric_limits<T>::quiet_NaN()) == x1(infinity)) {
+ if(boost::hash_detail::limits<T>::has_quiet_NaN) {
+ if(x1(boost::hash_detail::limits<T>::quiet_NaN()) == x1(infinity)) {
                 std::cerr<<"x1(quiet_NaN) == x1(infinity) == "<<x1(infinity)<<"\n";
             }
- if(x1(std::numeric_limits<T>::quiet_NaN()) == x1(minus_infinity)) {
+ if(x1(boost::hash_detail::limits<T>::quiet_NaN()) == x1(minus_infinity)) {
                 std::cerr<<"x1(quiet_NaN) == x1(-infinity) == "<<x1(minus_infinity)<<"\n";
             }
         }
     }
 #endif
 
- T max = (std::numeric_limits<T>::max)();
+ T max = (boost::hash_detail::limits<T>::max)();
     T half_max = max / 2;
     T quarter_max = max / 4;
     T three_quarter_max = max - quarter_max;
@@ -142,50 +142,50 @@
     BOOST_TEST(x1(v2) == HASH_NAMESPACE::hash_value(v2));
 #endif
 
- BOOST_TEST(x1(std::numeric_limits<T>::epsilon()) ==
- HASH_NAMESPACE::hash_value(std::numeric_limits<T>::epsilon()));
+ BOOST_TEST(x1(boost::hash_detail::limits<T>::epsilon()) ==
+ HASH_NAMESPACE::hash_value(boost::hash_detail::limits<T>::epsilon()));
 
- BOOST_TEST(std::numeric_limits<T>::epsilon() != (T) 0);
- if(x1(std::numeric_limits<T>::epsilon()) == x1((T) 0))
+ BOOST_TEST(boost::hash_detail::limits<T>::epsilon() != (T) 0);
+ if(x1(boost::hash_detail::limits<T>::epsilon()) == x1((T) 0))
         std::cerr<<"x1(epsilon) == x1(0) == "<<x1((T) 0)<<"\n";
 
- BOOST_TEST(-std::numeric_limits<T>::epsilon() != (T) 0);
- if(x1(-std::numeric_limits<T>::epsilon()) == x1((T) 0))
+ BOOST_TEST(-boost::hash_detail::limits<T>::epsilon() != (T) 0);
+ if(x1(-boost::hash_detail::limits<T>::epsilon()) == x1((T) 0))
         std::cerr<<"x1(-epsilon) == x1(0) == "<<x1((T) 0)<<"\n";
 
- BOOST_TEST((T) 1 + std::numeric_limits<T>::epsilon() != (T) 1);
- if(x1((T) 1 + std::numeric_limits<T>::epsilon()) == x1((T) 1))
+ BOOST_TEST((T) 1 + boost::hash_detail::limits<T>::epsilon() != (T) 1);
+ if(x1((T) 1 + boost::hash_detail::limits<T>::epsilon()) == x1((T) 1))
         std::cerr<<"x1(1 + epsilon) == x1(1) == "<<x1((T) 1)<<"\n";
 
- BOOST_TEST((T) 1 - std::numeric_limits<T>::epsilon() != (T) 1);
- if(x1((T) 1 - std::numeric_limits<T>::epsilon()) == x1((T) 1))
+ BOOST_TEST((T) 1 - boost::hash_detail::limits<T>::epsilon() != (T) 1);
+ if(x1((T) 1 - boost::hash_detail::limits<T>::epsilon()) == x1((T) 1))
         std::cerr<<"x1(1 - epsilon) == x1(1) == "<<x1((T) 1)<<"\n";
 
- BOOST_TEST((T) -1 + std::numeric_limits<T>::epsilon() != (T) -1);
- if(x1((T) -1 + std::numeric_limits<T>::epsilon()) == x1((T) -1))
+ BOOST_TEST((T) -1 + boost::hash_detail::limits<T>::epsilon() != (T) -1);
+ if(x1((T) -1 + boost::hash_detail::limits<T>::epsilon()) == x1((T) -1))
         std::cerr<<"x1(-1 + epsilon) == x1(-1) == "<<x1((T) -1)<<"\n";
 
- BOOST_TEST((T) -1 - std::numeric_limits<T>::epsilon() != (T) -1);
- if(x1((T) -1 - std::numeric_limits<T>::epsilon()) == x1((T) -1))
+ BOOST_TEST((T) -1 - boost::hash_detail::limits<T>::epsilon() != (T) -1);
+ if(x1((T) -1 - boost::hash_detail::limits<T>::epsilon()) == x1((T) -1))
         std::cerr<<"x1(-1 - epsilon) == x1(-1) == "<<x1((T) -1)<<"\n";
 
     // As before.
- if(std::numeric_limits<T>::has_denorm) {
- if(x1(std::numeric_limits<T>::denorm_min()) == x1(zero)) {
+ if(boost::hash_detail::limits<T>::has_denorm) {
+ if(x1(boost::hash_detail::limits<T>::denorm_min()) == x1(zero)) {
             std::cerr<<"x1(denorm_min) == x1(zero) == "<<x1(zero)<<"\n";
         }
 #if !BOOST_WORKAROUND(__DECCXX_VER,<70190006)
         // The Tru64/CXX standard library prior to 7.1 contains a bug in the
- // specialization of std::numeric_limits::denorm_min() for long
+ // specialization of boost::hash_detail::limits::denorm_min() for long
         // doubles which causes this test to fail.
- if(x1(std::numeric_limits<T>::denorm_min()) !=
- HASH_NAMESPACE::hash_value(std::numeric_limits<T>::denorm_min()))
+ if(x1(boost::hash_detail::limits<T>::denorm_min()) !=
+ HASH_NAMESPACE::hash_value(boost::hash_detail::limits<T>::denorm_min()))
         {
- std::cerr<<"x1(std::numeric_limits<T>::denorm_min()) = "
- << x1(std::numeric_limits<T>::denorm_min())
- << "\nhash_value(std::numeric_limits<T>::denorm_min()) = "
+ std::cerr<<"x1(boost::hash_detail::limits<T>::denorm_min()) = "
+ << x1(boost::hash_detail::limits<T>::denorm_min())
+ << "\nhash_value(boost::hash_detail::limits<T>::denorm_min()) = "
                 << HASH_NAMESPACE::hash_value(
- std::numeric_limits<T>::denorm_min())
+ boost::hash_detail::limits<T>::denorm_min())
                 << "\nx1(0) = "<<x1(0)<<"\n";
         }
 #endif
@@ -193,12 +193,12 @@
 
 // NaN also causes borland to crash.
 #if !defined(__BORLANDC__)
- if(std::numeric_limits<T>::has_quiet_NaN) {
- if(x1(std::numeric_limits<T>::quiet_NaN()) == x1(1.0)) {
+ if(boost::hash_detail::limits<T>::has_quiet_NaN) {
+ if(x1(boost::hash_detail::limits<T>::quiet_NaN()) == x1(1.0)) {
             std::cerr<<"x1(quiet_NaN) == x1(1.0) == "<<x1(1.0)<<"\n";
         }
- BOOST_TEST(x1(std::numeric_limits<T>::quiet_NaN()) ==
- HASH_NAMESPACE::hash_value(std::numeric_limits<T>::quiet_NaN()));
+ BOOST_TEST(x1(boost::hash_detail::limits<T>::quiet_NaN()) ==
+ HASH_NAMESPACE::hash_value(boost::hash_detail::limits<T>::quiet_NaN()));
     }
 #endif
 }

Modified: branches/proto/v3/libs/functional/hash/test/hash_friend_test.cpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/test/hash_friend_test.cpp (original)
+++ branches/proto/v3/libs/functional/hash/test/hash_friend_test.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/functional/hash/test/hash_function_pointer_test.cpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/test/hash_function_pointer_test.cpp (original)
+++ branches/proto/v3/libs/functional/hash/test/hash_function_pointer_test.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/functional/hash/test/hash_fwd_test.hpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/test/hash_fwd_test.hpp (original)
+++ branches/proto/v3/libs/functional/hash/test/hash_fwd_test.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/functional/hash/test/hash_fwd_test_1.cpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/test/hash_fwd_test_1.cpp (original)
+++ branches/proto/v3/libs/functional/hash/test/hash_fwd_test_1.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/functional/hash/test/hash_fwd_test_2.cpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/test/hash_fwd_test_2.cpp (original)
+++ branches/proto/v3/libs/functional/hash/test/hash_fwd_test_2.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/functional/hash/test/hash_global_namespace_test.cpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/test/hash_global_namespace_test.cpp (original)
+++ branches/proto/v3/libs/functional/hash/test/hash_global_namespace_test.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/functional/hash/test/hash_list_test.cpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/test/hash_list_test.cpp (original)
+++ branches/proto/v3/libs/functional/hash/test/hash_list_test.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/functional/hash/test/hash_long_double_test.cpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/test/hash_long_double_test.cpp (original)
+++ branches/proto/v3/libs/functional/hash/test/hash_long_double_test.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/functional/hash/test/hash_map_test.cpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/test/hash_map_test.cpp (original)
+++ branches/proto/v3/libs/functional/hash/test/hash_map_test.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/functional/hash/test/hash_map_test.hpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/test/hash_map_test.hpp (original)
+++ branches/proto/v3/libs/functional/hash/test/hash_map_test.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/functional/hash/test/hash_no_ext_fail_test.cpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/test/hash_no_ext_fail_test.cpp (original)
+++ branches/proto/v3/libs/functional/hash/test/hash_no_ext_fail_test.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/functional/hash/test/hash_no_ext_macro_1.cpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/test/hash_no_ext_macro_1.cpp (original)
+++ branches/proto/v3/libs/functional/hash/test/hash_no_ext_macro_1.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/functional/hash/test/hash_no_ext_macro_2.cpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/test/hash_no_ext_macro_2.cpp (original)
+++ branches/proto/v3/libs/functional/hash/test/hash_no_ext_macro_2.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/functional/hash/test/hash_number_test.cpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/test/hash_number_test.cpp (original)
+++ branches/proto/v3/libs/functional/hash/test/hash_number_test.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 
@@ -31,7 +31,7 @@
 template <class T>
 void numeric_test(T*)
 {
- typedef std::numeric_limits<T> limits;
+ typedef boost::hash_detail::limits<T> limits;
 
     compile_time_tests((T*) 0);
 
@@ -55,7 +55,7 @@
 
     if (limits::is_integer)
     {
- if(limits::is_signed || limits::digits <= std::numeric_limits<std::size_t>::digits)
+ if(limits::is_signed || limits::digits <= boost::hash_detail::limits<std::size_t>::digits)
             BOOST_TEST(HASH_NAMESPACE::hash_value(T(-5)) == (std::size_t)T(-5));
         BOOST_TEST(HASH_NAMESPACE::hash_value(T(0)) == (std::size_t)T(0u));
         BOOST_TEST(HASH_NAMESPACE::hash_value(T(10)) == (std::size_t)T(10u));
@@ -67,7 +67,7 @@
 template <class T>
 void limits_test(T*)
 {
- typedef std::numeric_limits<T> limits;
+ typedef boost::hash_detail::limits<T> limits;
 
     if(limits::is_specialized)
     {
@@ -98,7 +98,7 @@
 template <class T>
 void poor_quality_tests(T*)
 {
- typedef std::numeric_limits<T> limits;
+ typedef boost::hash_detail::limits<T> limits;
 
     HASH_NAMESPACE::hash<T> x1;
     HASH_NAMESPACE::hash<T> x2;

Modified: branches/proto/v3/libs/functional/hash/test/hash_pointer_test.cpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/test/hash_pointer_test.cpp (original)
+++ branches/proto/v3/libs/functional/hash/test/hash_pointer_test.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/functional/hash/test/hash_range_test.cpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/test/hash_range_test.cpp (original)
+++ branches/proto/v3/libs/functional/hash/test/hash_range_test.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/functional/hash/test/hash_sequence_test.hpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/test/hash_sequence_test.hpp (original)
+++ branches/proto/v3/libs/functional/hash/test/hash_sequence_test.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/functional/hash/test/hash_set_test.cpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/test/hash_set_test.cpp (original)
+++ branches/proto/v3/libs/functional/hash/test/hash_set_test.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/functional/hash/test/hash_set_test.hpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/test/hash_set_test.hpp (original)
+++ branches/proto/v3/libs/functional/hash/test/hash_set_test.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/functional/hash/test/hash_string_test.cpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/test/hash_string_test.cpp (original)
+++ branches/proto/v3/libs/functional/hash/test/hash_string_test.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/functional/hash/test/hash_value_array_test.cpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/test/hash_value_array_test.cpp (original)
+++ branches/proto/v3/libs/functional/hash/test/hash_value_array_test.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/functional/hash/test/hash_vector_test.cpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/test/hash_vector_test.cpp (original)
+++ branches/proto/v3/libs/functional/hash/test/hash_vector_test.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/functional/hash/test/link_ext_test.cpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/test/link_ext_test.cpp (original)
+++ branches/proto/v3/libs/functional/hash/test/link_ext_test.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/functional/hash/test/link_no_ext_test.cpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/test/link_no_ext_test.cpp (original)
+++ branches/proto/v3/libs/functional/hash/test/link_no_ext_test.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/functional/hash/test/link_test.cpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/test/link_test.cpp (original)
+++ branches/proto/v3/libs/functional/hash/test/link_test.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/functional/hash/test/link_test_2.cpp
==============================================================================
--- branches/proto/v3/libs/functional/hash/test/link_test_2.cpp (original)
+++ branches/proto/v3/libs/functional/hash/test/link_test_2.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/python/test/args.cpp
==============================================================================
--- branches/proto/v3/libs/python/test/args.cpp (original)
+++ branches/proto/v3/libs/python/test/args.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -14,7 +14,7 @@
 
 using namespace boost::python;
 
-#if BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x580))
+#if BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x580)) || BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500))
 # define make_tuple boost::python::make_tuple
 #endif
 

Modified: branches/proto/v3/libs/python/test/numpy.cpp
==============================================================================
--- branches/proto/v3/libs/python/test/numpy.cpp (original)
+++ branches/proto/v3/libs/python/test/numpy.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -10,19 +10,16 @@
 #include <boost/python/str.hpp>
 
 using namespace boost::python;
-
-#if BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x580))
-# define make_tuple ::boost::python::make_tuple
-#endif
+namespace py = boost::python;
 
 // See if we can invoke array() from C++
 numeric::array new_array()
 {
     return numeric::array(
- make_tuple(
- make_tuple(1,2,3)
- , make_tuple(4,5,6)
- , make_tuple(7,8,9)
+ py::make_tuple(
+ py::make_tuple(1,2,3)
+ , py::make_tuple(4,5,6)
+ , py::make_tuple(7,8,9)
             )
         );
 }
@@ -51,7 +48,7 @@
       str format("exception type: %sn");
       format += "exception value: %sn";
       format += "traceback:n%s" ;
- object ret = format % make_tuple(ty, v, tr);
+ object ret = format % py::make_tuple(ty, v, tr);
       return ret;
   }
 }
@@ -71,7 +68,7 @@
 // inherits that behavior from object.
 void exercise(numeric::array& y, object check)
 {
- y[make_tuple(2,1)] = 3;
+ y[py::make_tuple(2,1)] = 3;
     CHECK(y);
     CHECK(y.astype('D'));
     CHECK(y.copy());
@@ -116,12 +113,12 @@
     CHECK(y);
     CHECK(y.type());
 
- CHECK(y.factory(make_tuple(1.2, 3.4)));
- CHECK(y.factory(make_tuple(1.2, 3.4), "f8"));
- CHECK(y.factory(make_tuple(1.2, 3.4), "f8", true));
- CHECK(y.factory(make_tuple(1.2, 3.4), "f8", true, false));
- CHECK(y.factory(make_tuple(1.2, 3.4), "f8", true, false, object()));
- CHECK (y.factory(make_tuple(1.2, 3.4), "f8", true, false, object(), make_tuple(1,2,1)));
+ CHECK(y.factory(py::make_tuple(1.2, 3.4)));
+ CHECK(y.factory(py::make_tuple(1.2, 3.4), "f8"));
+ CHECK(y.factory(py::make_tuple(1.2, 3.4), "f8", true));
+ CHECK(y.factory(py::make_tuple(1.2, 3.4), "f8", true, false));
+ CHECK(y.factory(py::make_tuple(1.2, 3.4), "f8", true, false, object()));
+ CHECK (y.factory(py::make_tuple(1.2, 3.4), "f8", true, false, object(), py::make_tuple(1,2,1)));
 
 }
 

Modified: branches/proto/v3/libs/python/test/pickle3.cpp
==============================================================================
--- branches/proto/v3/libs/python/test/pickle3.cpp (original)
+++ branches/proto/v3/libs/python/test/pickle3.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -25,7 +25,7 @@
 #include <boost/python/extract.hpp>
 #include <boost/python/back_reference.hpp>
 
-#if BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x580))
+#if BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x580)) || BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500))
 # define make_tuple boost::python::make_tuple
 #endif
 

Modified: branches/proto/v3/libs/python/test/slice.cpp
==============================================================================
--- branches/proto/v3/libs/python/test/slice.cpp (original)
+++ branches/proto/v3/libs/python/test/slice.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -10,7 +10,7 @@
 
 using namespace boost::python;
 
-#if BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x580))
+#if BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x580)) || BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500))
 # define make_tuple boost::python::make_tuple
 #endif
 

Modified: branches/proto/v3/libs/serialization/doc/archive_reference.html
==============================================================================
--- branches/proto/v3/libs/serialization/doc/archive_reference.html (original)
+++ branches/proto/v3/libs/serialization/doc/archive_reference.html 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -67,7 +67,7 @@
 <dt><h4><code>void load(T &t);</code></h4></dt>
 <dd>
 This function must be implemented for all primitive data types. This can be
-accomplished through the use of a member template or explict declarations
+accomplished through the use of a member template or explicit declarations
 for all primitive types.
 </dd>
 
@@ -153,7 +153,7 @@
 <dd>
 <strong>Default</strong>:Does nothing.<br>
 <strong>Purpose</strong>:Called <strong>each time</strong> user data is saved.
-Its not called when archive book keeping data is saved. This is used by XML archives
+It's not called when archive book keeping data is saved. This is used by XML archives
 to determine when to inject a "&gt;" character at end of XML header. XML output archives
 keep their own internal flag indicating that data being written is header data. This
 internal flag is reset when an object start tag is written. When

Modified: branches/proto/v3/libs/serialization/test/test_static_warning.cpp
==============================================================================
--- branches/proto/v3/libs/serialization/test/test_static_warning.cpp (original)
+++ branches/proto/v3/libs/serialization/test/test_static_warning.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -8,23 +8,37 @@
 // note: this is a compile only test.
 
 #include <boost/static_warning.hpp>
+#include <boost/type_traits/is_polymorphic.hpp>
 
 #pragma warning(disable:4094)
 
 typedef char a1[2];
 typedef char a2[3];
 
+class polymorphic {
+ virtual ~polymorphic();
+};
+
+class non_polymorphic {
+};
+
+// note: compilation of this program should show 8 warning messages
+
 BOOST_STATIC_WARNING(true);
 BOOST_STATIC_WARNING(sizeof(a1) == sizeof(a2)); // Warn.
-BOOST_STATIC_WARNING(sizeof(a1) == sizeof(a2)); // Warn.
+BOOST_STATIC_WARNING(sizeof(a1) != sizeof(a1)); // Warn.
+BOOST_STATIC_WARNING(! boost::is_polymorphic<polymorphic>::value); // Warn.
+BOOST_STATIC_WARNING(boost::is_polymorphic<non_polymorphic>::value); // Warn.
 
 void warnings() {
     BOOST_STATIC_WARNING(true);
     BOOST_STATIC_WARNING(sizeof(a1) == sizeof(a2)); // Warn.
- BOOST_STATIC_WARNING(sizeof(a1) == sizeof(a2)); // Warn.
+ BOOST_STATIC_WARNING(sizeof(a1) != sizeof(a1)); // Warn.
+ BOOST_STATIC_WARNING(! boost::is_polymorphic<polymorphic>::value); // Warn.
+ BOOST_STATIC_WARNING(boost::is_polymorphic<non_polymorphic>::value); // Warn.
 }
 
 int main(int /* argc */, char * /* argv */[]){
     warnings();
- return EXIT_SUCCESS;
+ return 0;
 }

Modified: branches/proto/v3/libs/serialization/util/test.jam
==============================================================================
--- branches/proto/v3/libs/serialization/util/test.jam (original)
+++ branches/proto/v3/libs/serialization/util/test.jam 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -40,10 +40,6 @@
             # toolset optimizations
             <toolset>gcc:<cxxflags>"-ftemplate-depth-255"
             <toolset>msvc:<cxxflags>"-Gy"
- # toolset shared library support
- <toolset>como,<runtime-link>shared:<build>no
- <toolset>msvc,<stdlib>stlport,<runtime-link>shared:<build>no
- <toolset>cw,<runtime-link>static:<build>no
             $(requirements)
         : # test name
             $(test-name)

Modified: branches/proto/v3/libs/smart_ptr/shared_ptr.htm
==============================================================================
--- branches/proto/v3/libs/smart_ptr/shared_ptr.htm (original)
+++ branches/proto/v3/libs/smart_ptr/shared_ptr.htm 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -522,6 +522,7 @@
                         <P><B>Returns:</B> If <STRONG>*this</STRONG> <EM>owns</EM> a deleter <STRONG>d</STRONG>
                                 of type (cv-unqualified) <STRONG>D</STRONG>, returns <code>&amp;d</code>;
                                 otherwise returns 0.</P>
+ <P><B>Throws:</B> nothing.</P>
                 </BLOCKQUOTE>
                 <h2><a name="example">Example</a></h2>
                 <p>See shared_ptr_example.cpp for a

Modified: branches/proto/v3/libs/smart_ptr/test/Jamfile.v2
==============================================================================
--- branches/proto/v3/libs/smart_ptr/test/Jamfile.v2 (original)
+++ branches/proto/v3/libs/smart_ptr/test/Jamfile.v2 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -37,5 +37,6 @@
           [ compile-fail scoped_array_eq_fail.cpp ]
           [ run esft_regtest.cpp ]
           [ run esft_constructor_test.cpp ]
+ [ run yield_k_test.cpp ]
         ;
 }

Modified: branches/proto/v3/libs/smart_ptr/test/esft_regtest.cpp
==============================================================================
--- branches/proto/v3/libs/smart_ptr/test/esft_regtest.cpp (original)
+++ branches/proto/v3/libs/smart_ptr/test/esft_regtest.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -16,6 +16,7 @@
 #include <boost/weak_ptr.hpp>
 #include <boost/detail/lightweight_test.hpp>
 #include <memory>
+#include <string>
 
 class X: public boost::enable_shared_from_this< X >
 {
@@ -65,7 +66,7 @@
 
 int X::instances = 0;
 
-int main()
+void test()
 {
     BOOST_TEST( X::instances == 0 );
 
@@ -131,6 +132,53 @@
     }
 
     BOOST_TEST( X::instances == 0 );
+}
+
+struct V: public boost::enable_shared_from_this<V>
+{
+ virtual ~V() {}
+ std::string m_;
+};
+
+struct V2
+{
+ virtual ~V2() {}
+ std::string m2_;
+};
+
+struct W: V2, V
+{
+};
+
+void test2()
+{
+ boost::shared_ptr<W> p( new W );
+}
+
+void test3()
+{
+ V * p = new W;
+ boost::shared_ptr<void> pv( p );
+ BOOST_TEST( pv.get() == p );
+}
+
+struct null_deleter
+{
+ void operator()( void const* ) const {}
+};
+
+void test4()
+{
+ boost::shared_ptr<V> pv( new V );
+ boost::shared_ptr<V> pv2( pv.get(), null_deleter() );
+}
+
+int main()
+{
+ test();
+ test2();
+ test3();
+ test4();
 
     return boost::report_errors();
 }

Modified: branches/proto/v3/libs/unordered/doc/Jamfile.v2
==============================================================================
--- branches/proto/v3/libs/unordered/doc/Jamfile.v2 (original)
+++ branches/proto/v3/libs/unordered/doc/Jamfile.v2 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -12,4 +12,15 @@
     <xsl:param>chunk.section.depth=2
     <xsl:param>generate.section.toc.level=2
     <xsl:param>toc.section.depth=1
- <xsl:param>toc.max.depth=1 ;
+ <xsl:param>toc.max.depth=1
+
+ <dependency>css
+ <dependency>images
+ ;
+
+install css : [ glob $(BOOST_ROOT)/doc/src/*.css ]
+ : <location>html ;
+install images : [ glob $(BOOST_ROOT)/doc/src/images/*.png ]
+ : <location>html/images ;
+explicit css ;
+explicit images ;

Modified: branches/proto/v3/libs/unordered/doc/buckets.qbk
==============================================================================
--- branches/proto/v3/libs/unordered/doc/buckets.qbk (original)
+++ branches/proto/v3/libs/unordered/doc/buckets.qbk 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,4 +1,4 @@
-[/ Copyright 2006-2007 Daniel James.
+[/ Copyright 2006-2008 Daniel James.
  / 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) ]
 

Modified: branches/proto/v3/libs/unordered/doc/comparison.qbk
==============================================================================
--- branches/proto/v3/libs/unordered/doc/comparison.qbk (original)
+++ branches/proto/v3/libs/unordered/doc/comparison.qbk 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,4 +1,4 @@
-[/ Copyright 2006-2007 Daniel James.
+[/ Copyright 2006-2008 Daniel James.
  / 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) ]
 
@@ -83,7 +83,7 @@
     ]
     [
         [`erase` never throws an exception]
- [The containers hash or predicate function can throw exceptions
+ [The containers' hash or predicate function can throw exceptions
             from `erase`]
     ]
 ]

Modified: branches/proto/v3/libs/unordered/doc/hash_equality.qbk
==============================================================================
--- branches/proto/v3/libs/unordered/doc/hash_equality.qbk (original)
+++ branches/proto/v3/libs/unordered/doc/hash_equality.qbk 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,4 +1,4 @@
-[/ Copyright 2006-2007 Daniel James.
+[/ Copyright 2006-2008 Daniel James.
  / 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) ]
 
@@ -6,32 +6,35 @@
 
 While the associative containers use an ordering relation to specify how the
 elements are stored, the unordered associative containers use an equality
-predicate and a hash function. For example, [classref boost::unordered_set]
+predicate and a hash function. For example, [classref boost::unordered_map]
 is declared as:
 
- template<typename Value,
- typename Hash = ``[classref boost::hash]``<Value>,
- typename Pred = std::equal_to<Value>,
- typename Alloc = std::allocator<Value> >
- class ``[classref boost::unordered_set unordered_set]``;
+ template <
+ class Key, class Mapped,
+ class Hash = ``[classref boost::hash]``<Key>,
+ class Pred = std::equal_to<Key>,
+ class Alloc = std::allocator<Key> >
+ class ``[classref boost::unordered_map unordered_map]``;
 
 The hash function comes first as you might want to change the hash function
-but not the equality predicate, while if you were to change the behavior
-of the equality predicate you would have to change the hash function to match
-it. So, if you wanted to use the
+but not the equality predicate. For example, if you wanted to use the
 [@http://www.isthe.com/chongo/tech/comp/fnv/ FNV-1 hash] you could write:
 
- ``[classref boost::unordered_set]``<std::string, hash::fnv_1> words;
+[import src_code/dictionary.cpp]
+[case_sensitive_dictionary_fnv]
 
 An example implementation of FNV-1, and some other hash functions are supplied
 in the examples directory.
 
-Alternatively, you might wish to use a different equality function. If you do
-this you will need to use a hash function that matches it. So to implement a
-case-insensitive dictionary:
+If you wish to use a different equality function,
+you will also need to use a matching hash function. For
+example, to implement a case insensitive dictionary you need to define a
+case insensitive equality predicate and hash function:
 
-[import src_code/insensitive.cpp]
 [case_insensitive_functions]
+
+Which you can then use in a case insensitive dictionary:
+
 [case_insensitive_dictionary]
 
 This is a simplified version of the example at
@@ -45,8 +48,9 @@
 [import src_code/point1.cpp]
 [point_example1]
 
-Although, [link hash.custom extending boost::hash to support the type] is
-probably a better solution:
+Since the default hash function is [link hash Boost.Hash],
+we can [link hash.custom extend it to support the type]
+so that the hash function doesn't need to be explicitly given:
 
 [import src_code/point2.cpp]
 [point_example2]

Modified: branches/proto/v3/libs/unordered/doc/intro.qbk
==============================================================================
--- branches/proto/v3/libs/unordered/doc/intro.qbk (original)
+++ branches/proto/v3/libs/unordered/doc/intro.qbk 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,4 +1,4 @@
-[/ Copyright 2006-2007 Daniel James.
+[/ Copyright 2006-2008 Daniel James.
  / 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) ]
 
@@ -84,32 +84,18 @@
 The containers are used in a similar manner to the normal associative
 containers:
 
- #include <``[headerref boost/unordered_map.hpp]``>
- #include <cassert>
-
- int main()
- {
- boost::unordered_map<std::string, int> x;
- x["one"] = 1;
- x["two"] = 2;
- x["three"] = 3;
-
- assert(x["one"] == 1);
- assert(x["missing"] == 0);
- }
+[import src_code/intro.cpp]
+[intro_example1_2]
 
 But since the elements aren't ordered, the output of:
 
- BOOST_FOREACH(map::value_type i, x) {
- std::cout<<i.first<<","<<i.second<<"\n";
- }
+[intro_example1_3]
 
 can be in any order. For example, it might be:
 
     two,2
     one,1
     three,3
- missing,0
 
 To store an object in an unordered associative container requires both an
 key equality function and a hash function. The default function objects in

Modified: branches/proto/v3/libs/unordered/doc/rationale.qbk
==============================================================================
--- branches/proto/v3/libs/unordered/doc/rationale.qbk (original)
+++ branches/proto/v3/libs/unordered/doc/rationale.qbk 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,4 +1,4 @@
-[/ Copyright 2006-2007 Daniel James.
+[/ Copyright 2006-2008 Daniel James.
  / 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) ]
 
@@ -10,7 +10,7 @@
     N2345, 'Placement Insert for Containers']]
 [def __n2369__
     [@http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2007/n2369.pdf
- the August 2008 version of the working draft standard]]
+ the August 2007 version of the working draft standard]]
 
 [section:rationale Implementation Rationale]
 

Modified: branches/proto/v3/libs/unordered/doc/ref.xml
==============================================================================
--- branches/proto/v3/libs/unordered/doc/ref.xml (original)
+++ branches/proto/v3/libs/unordered/doc/ref.xml 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 <!--
-Copyright Daniel James 2006-2007
+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)
 -->

Deleted: branches/proto/v3/libs/unordered/doc/src_code/insensitive.cpp
==============================================================================
--- branches/proto/v3/libs/unordered/doc/src_code/insensitive.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
+++ (empty file)
@@ -1,79 +0,0 @@
-
-// Copyright 2006-2007 Daniel James.
-// 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)
-
-#include <boost/unordered_map.hpp>
-#include <boost/detail/lightweight_test.hpp>
-#include <boost/algorithm/string/predicate.hpp>
-
-//[case_insensitive_functions
- struct iequal_to
- : std::binary_function<std::string, std::string, bool>
- {
- bool operator()(std::string const& x,
- std::string const& y) const
- {
- return boost::algorithm::iequals(x, y, std::locale());
- }
- };
-
- struct ihash
- : std::unary_function<std::string, std::size_t>
- {
- std::size_t operator()(std::string const& x) const
- {
- std::size_t seed = 0;
- std::locale locale;
-
- for(std::string::const_iterator it = x.begin();
- it != x.end(); ++it)
- {
- boost::hash_combine(seed, std::toupper(*it, locale));
- }
-
- return seed;
- }
- };
-
- struct word_info;
-//]
-
- struct word_info {
- int tag;
- explicit word_info(int t = 0) : tag(t) {}
- };
-
-int main() {
-//[case_insensitive_dictionary
- boost::unordered_map<std::string, word_info, ihash, iequal_to>
- idictionary;
-//]
-
- BOOST_TEST(idictionary.empty());
-
- idictionary["one"] = word_info(1);
- BOOST_TEST(idictionary.size() == 1);
- BOOST_TEST(idictionary.find("ONE") != idictionary.end() &&
- idictionary.find("ONE") == idictionary.find("one"));
-
- idictionary.insert(std::make_pair("ONE", word_info(2)));
- BOOST_TEST(idictionary.size() == 1);
- BOOST_TEST(idictionary.find("ONE") != idictionary.end() &&
- idictionary.find("ONE")->first == "one" &&
- idictionary.find("ONE")->second.tag == 1);
-
- idictionary["One"] = word_info(3);
- BOOST_TEST(idictionary.size() == 1);
- BOOST_TEST(idictionary.find("ONE") != idictionary.end() &&
- idictionary.find("ONE")->first == "one" &&
- idictionary.find("ONE")->second.tag == 3);
-
- idictionary["two"] = word_info(4);
- BOOST_TEST(idictionary.size() == 2);
- BOOST_TEST(idictionary.find("two") != idictionary.end() &&
- idictionary.find("TWO")->first == "two" &&
- idictionary.find("Two")->second.tag == 4);
-
- return boost::report_errors();
-}

Modified: branches/proto/v3/libs/unordered/doc/src_code/point1.cpp
==============================================================================
--- branches/proto/v3/libs/unordered/doc/src_code/point1.cpp (original)
+++ branches/proto/v3/libs/unordered/doc/src_code/point1.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 
@@ -29,8 +29,7 @@
         }
     };
 
- boost::unordered_multiset<point, point_hash, std::equal_to<point> >
- points;
+ boost::unordered_multiset<point, point_hash> points;
 //]
 
 int main() {

Modified: branches/proto/v3/libs/unordered/doc/src_code/point2.cpp
==============================================================================
--- branches/proto/v3/libs/unordered/doc/src_code/point2.cpp (original)
+++ branches/proto/v3/libs/unordered/doc/src_code/point2.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/unordered/doc/unordered.qbk
==============================================================================
--- branches/proto/v3/libs/unordered/doc/unordered.qbk (original)
+++ branches/proto/v3/libs/unordered/doc/unordered.qbk 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,4 +1,4 @@
-[/ Copyright 2006-2007 Daniel James.
+[/ Copyright 2006-2008 Daniel James.
  / 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) ]
 
@@ -6,7 +6,7 @@
     [quickbook 1.4]
     [authors [James, Daniel]]
     [copyright 2003 2004 Jeremy B. Maitin-Shepard]
- [copyright 2005 2006 2007 Daniel James]
+ [copyright 2005 2006 2007 2008 Daniel James]
     [purpose std::tr1 compliant hash containers]
     [id unordered]
     [dirname unordered]
@@ -22,5 +22,5 @@
 [include:unordered hash_equality.qbk]
 [include:unordered comparison.qbk]
 [include:unordered rationale.qbk]
-
 [xinclude ref.xml]
+[xinclude bibliography.xml]

Modified: branches/proto/v3/libs/unordered/examples/case_insensitive.hpp
==============================================================================
--- branches/proto/v3/libs/unordered/examples/case_insensitive.hpp (original)
+++ branches/proto/v3/libs/unordered/examples/case_insensitive.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/unordered/examples/case_insensitive_test.cpp
==============================================================================
--- branches/proto/v3/libs/unordered/examples/case_insensitive_test.cpp (original)
+++ branches/proto/v3/libs/unordered/examples/case_insensitive_test.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/unordered/examples/hash_functions/fnv-1.hpp
==============================================================================
--- branches/proto/v3/libs/unordered/examples/hash_functions/fnv-1.hpp (original)
+++ branches/proto/v3/libs/unordered/examples/hash_functions/fnv-1.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -7,7 +7,7 @@
     template <std::size_t FnvPrime, std::size_t OffsetBias>
     struct basic_fnv_1
     {
- std::size_t operator()(std::string const& text)
+ std::size_t operator()(std::string const& text) const
         {
             std::size_t hash = OffsetBias;
             for(std::string::const_iterator it = text.begin(), end = text.end();
@@ -24,7 +24,7 @@
     template <std::size_t FnvPrime, std::size_t OffsetBias>
     struct basic_fnv_1a
     {
- std::size_t operator()(std::string const& text)
+ std::size_t operator()(std::string const& text) const
         {
             std::size_t hash = OffsetBias;
             for(std::string::const_iterator it = text.begin(), end = text.end();
@@ -55,7 +55,7 @@
     // 128 bit FNV_prime = 309485009821345068724781401
     // 256 bit FNV_prime = 374144419156711147060143317175368453031918731002211
 
- const std::size_t fnv_offset_bias = 2166136261;
+ const std::size_t fnv_offset_bias = 2166136261u;
     // 64 bit offset_basis = 14695981039346656037
     // 128 bit offset_basis = 275519064689413815358837431229664493455
     // 256 bit offset_basis = 100029257958052580907070968620625704837092796014241193945225284501741471925557

Modified: branches/proto/v3/libs/unordered/test/Jamfile.v2
==============================================================================
--- branches/proto/v3/libs/unordered/test/Jamfile.v2 (original)
+++ branches/proto/v3/libs/unordered/test/Jamfile.v2 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-# Copyright 2006-2007 Daniel James.
+# Copyright 2006-2008 Daniel James.
 # 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)
 

Modified: branches/proto/v3/libs/unordered/test/exception/Jamfile.v2
==============================================================================
--- branches/proto/v3/libs/unordered/test/exception/Jamfile.v2 (original)
+++ branches/proto/v3/libs/unordered/test/exception/Jamfile.v2 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-# Copyright 2006-2007 Daniel James.
+# Copyright 2006-2008 Daniel James.
 # 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)
 

Modified: branches/proto/v3/libs/unordered/test/exception/assign_exception_tests.cpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/exception/assign_exception_tests.cpp (original)
+++ branches/proto/v3/libs/unordered/test/exception/assign_exception_tests.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/unordered/test/exception/constructor_exception_tests.cpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/exception/constructor_exception_tests.cpp (original)
+++ branches/proto/v3/libs/unordered/test/exception/constructor_exception_tests.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/unordered/test/exception/containers.hpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/exception/containers.hpp (original)
+++ branches/proto/v3/libs/unordered/test/exception/containers.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/unordered/test/exception/copy_exception_tests.cpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/exception/copy_exception_tests.cpp (original)
+++ branches/proto/v3/libs/unordered/test/exception/copy_exception_tests.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/unordered/test/exception/erase_exception_tests.cpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/exception/erase_exception_tests.cpp (original)
+++ branches/proto/v3/libs/unordered/test/exception/erase_exception_tests.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/unordered/test/exception/insert_exception_tests.cpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/exception/insert_exception_tests.cpp (original)
+++ branches/proto/v3/libs/unordered/test/exception/insert_exception_tests.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/unordered/test/exception/rehash_exception_tests.cpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/exception/rehash_exception_tests.cpp (original)
+++ branches/proto/v3/libs/unordered/test/exception/rehash_exception_tests.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/unordered/test/exception/swap_exception_tests.cpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/exception/swap_exception_tests.cpp (original)
+++ branches/proto/v3/libs/unordered/test/exception/swap_exception_tests.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/unordered/test/helpers/allocator.hpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/helpers/allocator.hpp (original)
+++ branches/proto/v3/libs/unordered/test/helpers/allocator.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/unordered/test/helpers/check_return_type.hpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/helpers/check_return_type.hpp (original)
+++ branches/proto/v3/libs/unordered/test/helpers/check_return_type.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/unordered/test/helpers/equivalent.hpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/helpers/equivalent.hpp (original)
+++ branches/proto/v3/libs/unordered/test/helpers/equivalent.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/unordered/test/helpers/exception_test.hpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/helpers/exception_test.hpp (original)
+++ branches/proto/v3/libs/unordered/test/helpers/exception_test.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 
@@ -19,30 +19,28 @@
 #include <boost/preprocessor/cat.hpp>
 
 #if defined(BOOST_UNORDERED_USE_TEST)
-# define UNORDERED_EXCEPTION_TEST_PREFIX
 # define UNORDERED_EXCEPTION_TEST_CASE(name, test_func, type) \
- BOOST_AUTO_TEST_CASE(name) \
+ UNORDERED_AUTO_TEST(name) \
         { \
             test_func< type > fixture; \
             ::test::exception_safety(fixture, BOOST_STRINGIZE(test_func<type>)); \
         }
-# define UNORDERED_EXCEPTION_TEST_POSTFIX
 # define UNORDERED_EPOINT_IMPL BOOST_ITEST_EPOINT
 #else
-# define UNORDERED_EXCEPTION_TEST_PREFIX int main() {
-# define UNORDERED_EXCEPTION_TEST_CASE(name, test_func, type) \
+# define UNORDERED_EXCEPTION_TEST_CASE(name, test_func, type) \
+ UNORDERED_AUTO_TEST(name) \
         { \
             test_func< type > fixture; \
             ::test::lightweight::exception_safety(fixture, BOOST_STRINGIZE(test_func<type>)); \
         }
-# define UNORDERED_EXCEPTION_TEST_POSTFIX return boost::report_errors(); }
 # define UNORDERED_EPOINT_IMPL ::test::lightweight::epoint
 #endif
 
+#define UNORDERED_EXCEPTION_TEST_POSTFIX RUN_TESTS()
+
 #define RUN_EXCEPTION_TESTS(test_seq, param_seq) \
- UNORDERED_EXCEPTION_TEST_PREFIX \
     BOOST_PP_SEQ_FOR_EACH_PRODUCT(RUN_EXCEPTION_TESTS_OP, (test_seq)(param_seq)) \
- UNORDERED_EXCEPTION_TEST_POSTFIX
+ RUN_TESTS()
 
 #define RUN_EXCEPTION_TESTS_OP(r, product) \
     UNORDERED_EXCEPTION_TEST_CASE( \

Modified: branches/proto/v3/libs/unordered/test/helpers/fwd.hpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/helpers/fwd.hpp (original)
+++ branches/proto/v3/libs/unordered/test/helpers/fwd.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/unordered/test/helpers/generators.hpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/helpers/generators.hpp (original)
+++ branches/proto/v3/libs/unordered/test/helpers/generators.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/unordered/test/helpers/helpers.hpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/helpers/helpers.hpp (original)
+++ branches/proto/v3/libs/unordered/test/helpers/helpers.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/unordered/test/helpers/input_iterator.hpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/helpers/input_iterator.hpp (original)
+++ branches/proto/v3/libs/unordered/test/helpers/input_iterator.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/unordered/test/helpers/invariants.hpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/helpers/invariants.hpp (original)
+++ branches/proto/v3/libs/unordered/test/helpers/invariants.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/unordered/test/helpers/metafunctions.hpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/helpers/metafunctions.hpp (original)
+++ branches/proto/v3/libs/unordered/test/helpers/metafunctions.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/unordered/test/helpers/random_values.hpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/helpers/random_values.hpp (original)
+++ branches/proto/v3/libs/unordered/test/helpers/random_values.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/unordered/test/helpers/strong.hpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/helpers/strong.hpp (original)
+++ branches/proto/v3/libs/unordered/test/helpers/strong.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/unordered/test/helpers/test.hpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/helpers/test.hpp (original)
+++ branches/proto/v3/libs/unordered/test/helpers/test.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 
@@ -7,13 +7,90 @@
 #define BOOST_UNORDERED_TEST_TEST_HEADER
 
 #if defined(BOOST_UNORDERED_USE_TEST)
+
 #include <boost/test/test_tools.hpp>
 #define UNORDERED_CHECK(x) BOOST_CHECK(x)
 #define UNORDERED_REQUIRE(x) BOOST_REQUIRE(x)
+#define UNORDERED_AUTO_TEST(x) BOOST_AUTO_TEST_CASE(x)
+#define RUN_TESTS()
+
 #else
+
 #include <boost/detail/lightweight_test.hpp>
+#include <boost/preprocessor/cat.hpp>
+
 #define UNORDERED_CHECK(x) BOOST_TEST(x)
-#define UNORDERED_REQUIRE(x) if(!(x)) { BOOST_ERROR(BOOST_STRINGIZE(x)); throw test::lightweight::test_failure(); }
+#define UNORDERED_REQUIRE(x) if(!(x)) { BOOST_ERROR(BOOST_STRINGIZE(x)); throw ::test::lightweight::test_failure(); }
+#define UNORDERED_AUTO_TEST(x) \
+ struct BOOST_PP_CAT(x, _type) : public ::test::registered_test_base { \
+ BOOST_PP_CAT(x, _type)() { \
+ ::test::test_list::add_test(this); \
+ } \
+ void run(); \
+ }; \
+ BOOST_PP_CAT(x, _type) x; \
+ void BOOST_PP_CAT(x, _type)::run()
+#define RUN_TESTS() int main() { ::test::test_list::run_tests(); return boost::report_errors(); }
+
+namespace test {
+ struct registered_test_base {
+ registered_test_base* next;
+ virtual void run() = 0;
+ virtual ~registered_test_base() {}
+ };
+
+ namespace test_list {
+ static inline registered_test_base*& first() {
+ static registered_test_base* ptr = 0;
+ return ptr;
+ }
+
+ static inline registered_test_base*& last() {
+ static registered_test_base* ptr = 0;
+ return ptr;
+ }
+
+ static inline void add_test(registered_test_base* test) {
+ if(last()) {
+ last()->next = test;
+ }
+ else {
+ first() = test;
+ }
+
+ last() = test;
+ }
+
+ static inline void run_tests() {
+ for(registered_test_base* i = first(); i; i = i->next)
+ i->run();
+ }
+ };
+}
+
 #endif
 
+#include <boost/preprocessor/seq/for_each_product.hpp>
+#include <boost/preprocessor/seq/fold_left.hpp>
+#include <boost/preprocessor/seq/to_tuple.hpp>
+#include <boost/preprocessor/seq/seq.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+// Run test with every combination of the parameters (a sequence of sequences)
+#define UNORDERED_TEST(name, parameters) \
+ BOOST_PP_SEQ_FOR_EACH_PRODUCT(UNORDERED_TEST_OP, ((name)) parameters)
+
+#define UNORDERED_TEST_OP(r, product) \
+ UNORDERED_TEST_OP2( \
+ BOOST_PP_SEQ_HEAD(product), \
+ BOOST_PP_SEQ_TAIL(product))
+
+#define UNORDERED_TEST_OP2(name, params) \
+ UNORDERED_AUTO_TEST(BOOST_PP_SEQ_FOLD_LEFT(UNORDERED_TEST_OP_JOIN, name, params)) { \
+ name BOOST_PP_SEQ_TO_TUPLE(params); \
+ }
+
+#define UNORDERED_TEST_OP_JOIN(s, state, elem) \
+ BOOST_PP_CAT(state, BOOST_PP_CAT(_, elem))
+
 #endif

Modified: branches/proto/v3/libs/unordered/test/helpers/tracker.hpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/helpers/tracker.hpp (original)
+++ branches/proto/v3/libs/unordered/test/helpers/tracker.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/unordered/test/objects/exception.hpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/objects/exception.hpp (original)
+++ branches/proto/v3/libs/unordered/test/objects/exception.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/unordered/test/objects/fwd.hpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/objects/fwd.hpp (original)
+++ branches/proto/v3/libs/unordered/test/objects/fwd.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/unordered/test/objects/memory.hpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/objects/memory.hpp (original)
+++ branches/proto/v3/libs/unordered/test/objects/memory.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/unordered/test/objects/minimal.hpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/objects/minimal.hpp (original)
+++ branches/proto/v3/libs/unordered/test/objects/minimal.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/unordered/test/objects/test.hpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/objects/test.hpp (original)
+++ branches/proto/v3/libs/unordered/test/objects/test.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/unordered/test/unordered/Jamfile.v2
==============================================================================
--- branches/proto/v3/libs/unordered/test/unordered/Jamfile.v2 (original)
+++ branches/proto/v3/libs/unordered/test/unordered/Jamfile.v2 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-# Copyright 2006-2007 Daniel James.
+# Copyright 2006-2008 Daniel James.
 # 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)
 

Modified: branches/proto/v3/libs/unordered/test/unordered/assign_tests.cpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/unordered/assign_tests.cpp (original)
+++ branches/proto/v3/libs/unordered/test/unordered/assign_tests.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,11 +1,11 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 
 #include <boost/unordered_set.hpp>
 #include <boost/unordered_map.hpp>
-#include <boost/detail/lightweight_test.hpp>
+#include "../helpers/test.hpp"
 #include "../objects/test.hpp"
 #include "../helpers/random_values.hpp"
 #include "../helpers/tracker.hpp"
@@ -13,6 +13,8 @@
 
 #include <iostream>
 
+namespace assign_tests {
+
 test::seed_t seed(96785);
 
 template <class T>
@@ -83,32 +85,24 @@
     }
 }
 
-int main()
-{
- boost::unordered_set<test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_set;
- boost::unordered_multiset<test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_multiset;
- boost::unordered_map<test::object, test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_map;
- boost::unordered_multimap<test::object, test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_multimap;
-
- assign_tests1(test_set);
- assign_tests1(test_multiset);
- assign_tests1(test_map);
- assign_tests1(test_multimap);
-
- assign_tests1(test_set, test::generate_collisions);
- assign_tests1(test_multiset, test::generate_collisions);
- assign_tests1(test_map, test::generate_collisions);
- assign_tests1(test_multimap, test::generate_collisions);
-
- assign_tests2(test_set);
- assign_tests2(test_multiset);
- assign_tests2(test_map);
- assign_tests2(test_multimap);
-
- assign_tests2(test_set, test::generate_collisions);
- assign_tests2(test_multiset, test::generate_collisions);
- assign_tests2(test_map, test::generate_collisions);
- assign_tests2(test_multimap, test::generate_collisions);
+boost::unordered_set<test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_set;
+boost::unordered_multiset<test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_multiset;
+boost::unordered_map<test::object, test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_map;
+boost::unordered_multimap<test::object, test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_multimap;
+
+using test::default_generator;
+using test::generate_collisions;
+
+UNORDERED_TEST(assign_tests1,
+ ((test_set)(test_multiset)(test_map)(test_multimap))
+ ((default_generator)(generate_collisions))
+)
+
+UNORDERED_TEST(assign_tests2,
+ ((test_set)(test_multiset)(test_map)(test_multimap))
+ ((default_generator)(generate_collisions))
+)
 
- return boost::report_errors();
 }
+
+RUN_TESTS()

Modified: branches/proto/v3/libs/unordered/test/unordered/at_tests.cpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/unordered/at_tests.cpp (original)
+++ branches/proto/v3/libs/unordered/test/unordered/at_tests.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,13 +1,15 @@
 
-// Copyright 2007 Daniel James.
+// Copyright 2007-2008 Daniel James.
 // 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)
 
 #include <boost/unordered_map.hpp>
-#include <boost/detail/lightweight_test.hpp>
+#include "../helpers/test.hpp"
 #include <string>
 
-int main() {
+namespace at_tests {
+
+UNORDERED_AUTO_TEST(at_tests) {
     boost::unordered_map<std::string, int> x;
     typedef boost::unordered_map<std::string, int>::iterator iterator;
 
@@ -23,6 +25,8 @@
     }
     catch(std::out_of_range) {
     }
+}
 
- return boost::report_errors();
 }
+
+RUN_TESTS()

Modified: branches/proto/v3/libs/unordered/test/unordered/bucket_tests.cpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/unordered/bucket_tests.cpp (original)
+++ branches/proto/v3/libs/unordered/test/unordered/bucket_tests.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,16 +1,18 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 
 #include <boost/unordered_set.hpp>
 #include <boost/unordered_map.hpp>
-#include <boost/detail/lightweight_test.hpp>
+#include "../helpers/test.hpp"
 #include <algorithm>
 #include "../objects/test.hpp"
 #include "../helpers/random_values.hpp"
 #include "../helpers/helpers.hpp"
 
+namespace bucket_tests {
+
 test::seed_t seed(54635);
 
 template <class X>
@@ -48,12 +50,13 @@
     }
 }
 
-int main()
-{
- bucket_tests((boost::unordered_set<test::object, test::hash, test::equal_to, test::allocator<test::object> >*) 0);
- bucket_tests((boost::unordered_multiset<test::object, test::hash, test::equal_to, test::allocator<test::object> >*) 0);
- bucket_tests((boost::unordered_map<test::object, test::object, test::hash, test::equal_to, test::allocator<test::object> >*) 0);
- bucket_tests((boost::unordered_multimap<test::object, test::object, test::hash, test::equal_to, test::allocator<test::object> >*) 0);
+boost::unordered_set<test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_set;
+boost::unordered_multiset<test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_multiset;
+boost::unordered_map<test::object, test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_map;
+boost::unordered_multimap<test::object, test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_multimap;
+
+UNORDERED_TEST(bucket_tests, ((test_set)(test_multiset)(test_map)(test_multimap)))
 
- return boost::report_errors();
 }
+
+RUN_TESTS()

Modified: branches/proto/v3/libs/unordered/test/unordered/compile_map.cpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/unordered/compile_map.cpp (original)
+++ branches/proto/v3/libs/unordered/test/unordered/compile_map.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 
@@ -9,11 +9,11 @@
 #include <boost/unordered_map.hpp>
 
 #include <iostream>
-#include <boost/detail/lightweight_test.hpp>
+#include "../helpers/test.hpp"
 #include "../objects/minimal.hpp"
 #include "./compile_tests.hpp"
 
-void test0()
+UNORDERED_AUTO_TEST(test0)
 {
     typedef std::pair<test::minimal::assignable const,
             test::minimal::copy_constructible> value_type;
@@ -42,8 +42,7 @@
     container_test(multimap, value);
 }
 
-void test1()
-{
+UNORDERED_AUTO_TEST(test1) {
     boost::hash<int> hash;
     std::equal_to<int> equal_to;
     int value = 0;
@@ -67,7 +66,7 @@
     unordered_test(multimap, value, map_value, hash, equal_to);
 }
 
-void test2()
+UNORDERED_AUTO_TEST(test2)
 {
     test::minimal::assignable assignable
         = test::minimal::assignable::create();
@@ -121,11 +120,4 @@
     unordered_test(multimap, assignable, map_value, hash, equal_to);
 }
 
-int main()
-{
- test0();
- test1();
- test2();
-
- return boost::report_errors();
-}
+RUN_TESTS()

Modified: branches/proto/v3/libs/unordered/test/unordered/compile_set.cpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/unordered/compile_set.cpp (original)
+++ branches/proto/v3/libs/unordered/test/unordered/compile_set.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 
@@ -9,11 +9,11 @@
 #include <boost/unordered_set.hpp>
 
 #include <iostream>
-#include <boost/detail/lightweight_test.hpp>
+#include "../helpers/test.hpp"
 #include "../objects/minimal.hpp"
 #include "./compile_tests.hpp"
 
-void test0()
+UNORDERED_AUTO_TEST(test0)
 {
     test::minimal::assignable assignable = test::minimal::assignable::create();
 
@@ -36,7 +36,7 @@
     container_test(multiset, assignable);
 }
 
-void test1()
+UNORDERED_AUTO_TEST(test1)
 {
     boost::hash<int> hash;
     std::equal_to<int> equal_to;
@@ -59,7 +59,7 @@
     unordered_test(multiset, value, value, hash, equal_to);
 }
 
-void test2()
+UNORDERED_AUTO_TEST(test2)
 {
     test::minimal::assignable assignable
         = test::minimal::assignable::create();
@@ -95,10 +95,4 @@
     unordered_test(multiset, assignable, assignable, hash, equal_to);
 }
 
-int main() {
- test0();
- test1();
- test2();
-
- return boost::report_errors();
-}
+RUN_TESTS()

Modified: branches/proto/v3/libs/unordered/test/unordered/compile_tests.hpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/unordered/compile_tests.hpp (original)
+++ branches/proto/v3/libs/unordered/test/unordered/compile_tests.hpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2005-2007 Daniel James.
+// Copyright 2005-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/unordered/test/unordered/constructor_tests.cpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/unordered/constructor_tests.cpp (original)
+++ branches/proto/v3/libs/unordered/test/unordered/constructor_tests.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,11 +1,11 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 
 #include <boost/unordered_set.hpp>
 #include <boost/unordered_map.hpp>
-#include <boost/detail/lightweight_test.hpp>
+#include "../helpers/test.hpp"
 #include "../objects/test.hpp"
 #include "../helpers/random_values.hpp"
 #include "../helpers/tracker.hpp"
@@ -15,6 +15,8 @@
 
 #include <iostream>
 
+namespace constructor_tests {
+
 test::seed_t seed(356730);
 
 template <class T>
@@ -255,53 +257,28 @@
     test::check_equivalent_keys(x);
 }
 
-int main()
-{
- boost::unordered_set<test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_set;
- boost::unordered_multiset<test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_multiset;
- boost::unordered_map<test::object, test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_map;
- boost::unordered_multimap<test::object, test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_multimap;
-
- std::cerr<<"Test1 test_set\n";
- constructor_tests1(test_set);
- std::cerr<<"Test1 test_multiset\n";
- constructor_tests1(test_multiset);
- std::cerr<<"Test1 test_map\n";
- constructor_tests1(test_map);
- std::cerr<<"Test1 test_multimap\n";
- constructor_tests1(test_multimap);
-
- std::cerr<<"Test1 test_set, collisions\n";
- constructor_tests1(test_set, test::generate_collisions);
- std::cerr<<"Test1 test_multiset, collisions\n";
- constructor_tests1(test_multiset, test::generate_collisions);
- std::cerr<<"Test1 test_map, collisions\n";
- constructor_tests1(test_map, test::generate_collisions);
- std::cerr<<"Test1 test_multimap, collisions\n";
- constructor_tests1(test_multimap, test::generate_collisions);
-
- std::cerr<<"Test2 test_set\n";
- constructor_tests2(test_set);
- std::cerr<<"Test2 test_multiset\n";
- constructor_tests2(test_multiset);
- std::cerr<<"Test2 test_map\n";
- constructor_tests2(test_map);
- std::cerr<<"Test2 test_multimap\n";
- constructor_tests2(test_multimap);
-
- std::cerr<<"Test2 test_set, collisions\n";
- constructor_tests2(test_set, test::generate_collisions);
- std::cerr<<"Test2 test_multiset, collisions\n";
- constructor_tests2(test_multiset, test::generate_collisions);
- std::cerr<<"Test2 test_map, collisions\n";
- constructor_tests2(test_map, test::generate_collisions);
- std::cerr<<"Test2 test_multimap, collisions\n";
- constructor_tests2(test_multimap, test::generate_collisions);
-
- std::cerr<<"Map Test unordered_map<test::object, test::object>\n";
- map_constructor_test(test_map);
- std::cerr<<"Map Test unordered_multimap<test::object, test::object>\n";
- map_constructor_test(test_multimap);
+boost::unordered_set<test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_set;
+boost::unordered_multiset<test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_multiset;
+boost::unordered_map<test::object, test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_map;
+boost::unordered_multimap<test::object, test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_multimap;
+
+using test::default_generator;
+using test::generate_collisions;
+
+UNORDERED_TEST(constructor_tests1,
+ ((test_set)(test_multiset)(test_map)(test_multimap))
+ ((default_generator)(generate_collisions))
+)
+
+UNORDERED_TEST(constructor_tests2,
+ ((test_set)(test_multiset)(test_map)(test_multimap))
+ ((default_generator)(generate_collisions))
+)
+
+UNORDERED_TEST(map_constructor_test,
+ ((test_map)(test_multimap))
+)
 
- return boost::report_errors();
 }
+
+RUN_TESTS()

Modified: branches/proto/v3/libs/unordered/test/unordered/copy_tests.cpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/unordered/copy_tests.cpp (original)
+++ branches/proto/v3/libs/unordered/test/unordered/copy_tests.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,11 +1,11 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 
 #include <boost/unordered_set.hpp>
 #include <boost/unordered_map.hpp>
-#include <boost/detail/lightweight_test.hpp>
+#include "../helpers/test.hpp"
 #include "../objects/test.hpp"
 #include "../helpers/random_values.hpp"
 #include "../helpers/tracker.hpp"
@@ -14,6 +14,9 @@
 
 test::seed_t seed(9063);
 
+namespace copy_tests
+{
+
 template <class T>
 void copy_construct_tests1(T*, test::random_generator const& generator = test::default_generator)
 {
@@ -90,27 +93,23 @@
     }
 }
 
-int main()
-{
- boost::unordered_set<test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_set;
- boost::unordered_multiset<test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_multiset;
- boost::unordered_map<test::object, test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_map;
- boost::unordered_multimap<test::object, test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_multimap;
-
- copy_construct_tests1(test_set);
- copy_construct_tests1(test_multiset);
- copy_construct_tests1(test_map);
- copy_construct_tests1(test_multimap);
-
- copy_construct_tests2(test_set);
- copy_construct_tests2(test_multiset);
- copy_construct_tests2(test_map);
- copy_construct_tests2(test_multimap);
-
- copy_construct_tests2(test_set, test::generate_collisions);
- copy_construct_tests2(test_multiset, test::generate_collisions);
- copy_construct_tests2(test_map, test::generate_collisions);
- copy_construct_tests2(test_multimap, test::generate_collisions);
+boost::unordered_set<test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_set;
+boost::unordered_multiset<test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_multiset;
+boost::unordered_map<test::object, test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_map;
+boost::unordered_multimap<test::object, test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_multimap;
+
+using test::default_generator;
+using test::generate_collisions;
+
+UNORDERED_TEST(copy_construct_tests1,
+ ((test_set)(test_multiset)(test_map)(test_multimap))
+)
+
+UNORDERED_TEST(copy_construct_tests2,
+ ((test_set)(test_multiset)(test_map)(test_multimap))
+ ((default_generator)(generate_collisions))
+)
 
- return boost::report_errors();
 }
+
+RUN_TESTS()

Modified: branches/proto/v3/libs/unordered/test/unordered/equivalent_keys_tests.cpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/unordered/equivalent_keys_tests.cpp (original)
+++ branches/proto/v3/libs/unordered/test/unordered/equivalent_keys_tests.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,11 +1,11 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 
 #include <boost/unordered_set.hpp>
 #include <boost/unordered_map.hpp>
-#include <boost/detail/lightweight_test.hpp>
+#include "../helpers/test.hpp"
 #include <algorithm>
 #include <map>
 #include <list>
@@ -32,7 +32,7 @@
     test::check_equivalent_keys(x1);
 }
 
-void set_tests()
+UNORDERED_AUTO_TEST(set_tests)
 {
     int values[][5] = {
         {1},
@@ -55,7 +55,7 @@
     test_equal_insertion<boost::unordered_multiset<int> >(values[4], values[4] + 3);
 }
 
-void map_tests()
+UNORDERED_AUTO_TEST(map_tests)
 {
     typedef std::list<std::pair<int const, int> > values_type;
     values_type v[5];
@@ -76,10 +76,4 @@
             v[i2].begin(), v[i2].end());
 }
 
-int main()
-{
- set_tests();
- map_tests();
-
- return boost::report_errors();
-}
+RUN_TESTS()

Modified: branches/proto/v3/libs/unordered/test/unordered/erase_equiv_tests.cpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/unordered/erase_equiv_tests.cpp (original)
+++ branches/proto/v3/libs/unordered/test/unordered/erase_equiv_tests.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 
@@ -7,7 +7,7 @@
 // hairy with several tricky edge cases - so explicitly test each one.
 
 #include <boost/unordered_map.hpp>
-#include <boost/detail/lightweight_test.hpp>
+#include "../helpers/test.hpp"
 #include <list>
 #include <set>
 #include <iostream>
@@ -52,8 +52,7 @@
 typedef collide_map::value_type collide_value;
 typedef std::list<collide_value> collide_list;
 
-
-void empty_range_tests()
+UNORDERED_AUTO_TEST(empty_range_tests)
 {
     collide_map x;
     x.erase(x.begin(), x.end());
@@ -61,7 +60,7 @@
     x.erase(x.end(), x.end());
 }
 
-void single_item_tests()
+UNORDERED_AUTO_TEST(single_item_tests)
 {
     collide_list init;
     init.push_back(collide_value(1,1));
@@ -75,7 +74,7 @@
     BOOST_TEST(x.count(1) == 0 && x.size() == 0);
 }
 
-void two_equivalent_item_tests()
+UNORDERED_AUTO_TEST(two_equivalent_item_tests)
 {
     collide_list init;
     init.push_back(collide_value(1,1));
@@ -172,7 +171,7 @@
     }
 }
 
-void exhaustive_collide_tests()
+UNORDERED_AUTO_TEST(exhaustive_collide_tests)
 {
     std::cout<<"exhaustive_collide_tests:\n";
     collide_map m;
@@ -180,20 +179,11 @@
     std::cout<<"\n";
 }
 
-void exhaustive_collide2_tests()
+UNORDERED_AUTO_TEST(exhaustive_collide2_tests)
 {
     std::cout<<"exhaustive_collide2_tests:\n";
     exhaustive_erase_tests((collide_map2*) 0, 8, 4);
     std::cout<<"\n";
 }
 
-int main()
-{
- empty_range_tests();
- single_item_tests();
- two_equivalent_item_tests();
- exhaustive_collide_tests();
- exhaustive_collide2_tests();
-
- return boost::report_errors();
-}
+RUN_TESTS()

Modified: branches/proto/v3/libs/unordered/test/unordered/erase_tests.cpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/unordered/erase_tests.cpp (original)
+++ branches/proto/v3/libs/unordered/test/unordered/erase_tests.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,11 +1,11 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 
 #include <boost/unordered_set.hpp>
 #include <boost/unordered_map.hpp>
-#include <boost/detail/lightweight_test.hpp>
+#include "../helpers/test.hpp"
 #include <boost/next_prior.hpp>
 #include "../objects/test.hpp"
 #include "../helpers/random_values.hpp"
@@ -15,6 +15,9 @@
 
 #include <iostream>
 
+namespace erase_tests
+{
+
 test::seed_t seed(85638);
 
 template <class Container>
@@ -119,30 +122,19 @@
     std::cerr<<"\n";
 }
 
-int main()
-{
- boost::unordered_set<test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_set;
- boost::unordered_multiset<test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_multiset;
- boost::unordered_map<test::object, test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_map;
- boost::unordered_multimap<test::object, test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_multimap;
-
- std::cerr<<"Erase test_set.\n";
- erase_tests1(test_set);
- std::cerr<<"Erase test_multiset.\n";
- erase_tests1(test_multiset);
- std::cerr<<"Erase test_map.\n";
- erase_tests1(test_map);
- std::cerr<<"Erase test_multimap.\n";
- erase_tests1(test_multimap);
-
- std::cerr<<"Erase test_set, collisions.\n";
- erase_tests1(test_set, test::generate_collisions);
- std::cerr<<"Erase test_multiset, collisions.\n";
- erase_tests1(test_multiset, test::generate_collisions);
- std::cerr<<"Erase test_map, collisions.\n";
- erase_tests1(test_map, test::generate_collisions);
- std::cerr<<"Erase test_multimap, collisions.\n";
- erase_tests1(test_multimap, test::generate_collisions);
+boost::unordered_set<test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_set;
+boost::unordered_multiset<test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_multiset;
+boost::unordered_map<test::object, test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_map;
+boost::unordered_multimap<test::object, test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_multimap;
+
+using test::default_generator;
+using test::generate_collisions;
+
+UNORDERED_TEST(erase_tests1,
+ ((test_set)(test_multiset)(test_map)(test_multimap))
+ ((default_generator)(generate_collisions))
+)
 
- return boost::report_errors();
 }
+
+RUN_TESTS()

Modified: branches/proto/v3/libs/unordered/test/unordered/find_tests.cpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/unordered/find_tests.cpp (original)
+++ branches/proto/v3/libs/unordered/test/unordered/find_tests.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,16 +1,19 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 
 #include <boost/unordered_set.hpp>
 #include <boost/unordered_map.hpp>
-#include <boost/detail/lightweight_test.hpp>
+#include "../helpers/test.hpp"
 #include "../objects/test.hpp"
 #include "../helpers/random_values.hpp"
 #include "../helpers/tracker.hpp"
 #include "../helpers/helpers.hpp"
 
+namespace find_tests
+{
+
 test::seed_t seed(78937);
 
 template <class X>
@@ -78,22 +81,19 @@
     }
 }
 
-int main()
-{
- boost::unordered_set<test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_set;
- boost::unordered_multiset<test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_multiset;
- boost::unordered_map<test::object, test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_map;
- boost::unordered_multimap<test::object, test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_multimap;
-
- find_tests1(test_set);
- find_tests1(test_multiset);
- find_tests1(test_map);
- find_tests1(test_multimap);
-
- find_tests1(test_set, test::generate_collisions);
- find_tests1(test_multiset, test::generate_collisions);
- find_tests1(test_map, test::generate_collisions);
- find_tests1(test_multimap, test::generate_collisions);
+boost::unordered_set<test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_set;
+boost::unordered_multiset<test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_multiset;
+boost::unordered_map<test::object, test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_map;
+boost::unordered_multimap<test::object, test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_multimap;
+
+using test::default_generator;
+using test::generate_collisions;
+
+UNORDERED_TEST(find_tests1,
+ ((test_set)(test_multiset)(test_map)(test_multimap))
+ ((default_generator)(generate_collisions))
+)
 
- return 0;
 }
+
+RUN_TESTS()

Modified: branches/proto/v3/libs/unordered/test/unordered/insert_stable_tests.cpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/unordered/insert_stable_tests.cpp (original)
+++ branches/proto/v3/libs/unordered/test/unordered/insert_stable_tests.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,11 +1,11 @@
 
-// Copyright 2007 Daniel James.
+// Copyright 2007-2008 Daniel James.
 // 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)
 
 #include <boost/unordered_set.hpp>
 #include <boost/unordered_map.hpp>
-#include <boost/detail/lightweight_test.hpp>
+#include "../helpers/test.hpp"
 
 #include <iostream>
 
@@ -39,7 +39,7 @@
     }
 }
 
-void stable_insert_test1() {
+UNORDERED_AUTO_TEST(stable_insert_test1) {
     boost::unordered_multiset<insert_stable::member> x;
 
     x.insert(insert_stable::member(1,1));
@@ -56,7 +56,7 @@
     BOOST_TEST(it == end);
 }
 
-void stable_insert_test2() {
+UNORDERED_AUTO_TEST(stable_insert_test2) {
     boost::unordered_multimap<insert_stable::member, int> x;
     typedef boost::unordered_multimap<insert_stable::member, int>::const_iterator iterator;
 
@@ -75,10 +75,4 @@
     BOOST_TEST(it == end);
 }
 
-int main()
-{
- stable_insert_test1();
- stable_insert_test2();
-
- return boost::report_errors();
-}
+RUN_TESTS()

Modified: branches/proto/v3/libs/unordered/test/unordered/insert_tests.cpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/unordered/insert_tests.cpp (original)
+++ branches/proto/v3/libs/unordered/test/unordered/insert_tests.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,11 +1,11 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 
 #include <boost/unordered_set.hpp>
 #include <boost/unordered_map.hpp>
-#include <boost/detail/lightweight_test.hpp>
+#include "../helpers/test.hpp"
 #include <boost/next_prior.hpp>
 #include "../objects/test.hpp"
 #include "../helpers/random_values.hpp"

Modified: branches/proto/v3/libs/unordered/test/unordered/link_test_1.cpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/unordered/link_test_1.cpp (original)
+++ branches/proto/v3/libs/unordered/test/unordered/link_test_1.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/unordered/test/unordered/link_test_2.cpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/unordered/link_test_2.cpp (original)
+++ branches/proto/v3/libs/unordered/test/unordered/link_test_2.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 

Modified: branches/proto/v3/libs/unordered/test/unordered/load_factor_tests.cpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/unordered/load_factor_tests.cpp (original)
+++ branches/proto/v3/libs/unordered/test/unordered/load_factor_tests.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,11 +1,11 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 
 #include <boost/unordered_set.hpp>
 #include <boost/unordered_map.hpp>
-#include <boost/detail/lightweight_test.hpp>
+#include "../helpers/test.hpp"
 #include <boost/limits.hpp>
 #include "../helpers/random_values.hpp"
 
@@ -14,6 +14,9 @@
 #pragma warning(disable:4127) // conditional expression is constant
 #endif
 
+namespace load_factor_tests
+{
+
 test::seed_t seed(783656);
 
 template <class X>
@@ -63,21 +66,23 @@
         insert_test(ptr, std::numeric_limits<float>::infinity());
 }
 
-int main()
-{
- load_factor_tests((boost::unordered_set<int>*) 0);
- load_factor_tests((boost::unordered_multiset<int>*) 0);
- load_factor_tests((boost::unordered_map<int, int>*) 0);
- load_factor_tests((boost::unordered_multimap<int, int>*) 0);
-
- load_factor_insert_tests((boost::unordered_set<int>*) 0);
- load_factor_insert_tests((boost::unordered_multiset<int>*) 0);
- load_factor_insert_tests((boost::unordered_map<int, int>*) 0);
- load_factor_insert_tests((boost::unordered_multimap<int, int>*) 0);
+boost::unordered_set<int>* int_set_ptr;
+boost::unordered_multiset<int>* int_multiset_ptr;
+boost::unordered_map<int, int>* int_map_ptr;
+boost::unordered_multimap<int, int>* int_multimap_ptr;
+
+UNORDERED_TEST(load_factor_tests,
+ ((int_set_ptr)(int_multiset_ptr)(int_map_ptr)(int_multimap_ptr))
+)
+
+UNORDERED_TEST(load_factor_insert_tests,
+ ((int_set_ptr)(int_multiset_ptr)(int_map_ptr)(int_multimap_ptr))
+)
 
- return boost::report_errors();
 }
 
+RUN_TESTS()
+
 #if defined(BOOST_MSVC)
 #pragma warning(pop)
 #pragma warning(disable:4127) // conditional expression is constant

Modified: branches/proto/v3/libs/unordered/test/unordered/rehash_tests.cpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/unordered/rehash_tests.cpp (original)
+++ branches/proto/v3/libs/unordered/test/unordered/rehash_tests.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,14 +1,17 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 
 #include <boost/unordered_set.hpp>
 #include <boost/unordered_map.hpp>
-#include <boost/detail/lightweight_test.hpp>
+#include "../helpers/test.hpp"
 #include "../helpers/random_values.hpp"
 #include "../helpers/tracker.hpp"
 
+namespace rehash_tests
+{
+
 test::seed_t seed(2974);
 
 template <class X>
@@ -59,11 +62,15 @@
     rehash_test1(ptr);
 }
 
-int main() {
- rehash_tests((boost::unordered_set<int>*) 0);
- rehash_tests((boost::unordered_multiset<int>*) 0);
- rehash_tests((boost::unordered_map<int, int>*) 0);
- rehash_tests((boost::unordered_multimap<int, int>*) 0);
+boost::unordered_set<int>* int_set_ptr;
+boost::unordered_multiset<int>* int_multiset_ptr;
+boost::unordered_map<int, int>* int_map_ptr;
+boost::unordered_multimap<int, int>* int_multimap_ptr;
+
+UNORDERED_TEST(rehash_tests,
+ ((int_set_ptr)(int_multiset_ptr)(int_map_ptr)(int_multimap_ptr))
+)
 
- return boost::report_errors();
 }
+
+RUN_TESTS()

Modified: branches/proto/v3/libs/unordered/test/unordered/simple_tests.cpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/unordered/simple_tests.cpp (original)
+++ branches/proto/v3/libs/unordered/test/unordered/simple_tests.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 
@@ -7,7 +7,7 @@
 
 #include <boost/unordered_set.hpp>
 #include <boost/unordered_map.hpp>
-#include <boost/detail/lightweight_test.hpp>
+#include "../helpers/test.hpp"
 #include <cstdlib>
 #include <algorithm>
 #include "../helpers/equivalent.hpp"
@@ -83,7 +83,7 @@
     }
 }
 
-int main()
+UNORDERED_AUTO_TEST(simple_tests)
 {
     using namespace std;
     srand(14878);
@@ -123,6 +123,6 @@
             multimap.insert(std::pair<const int, int>(index, rand()));
     }
     simple_test(multimap);
-
- return boost::report_errors();
 }
+
+RUN_TESTS()

Modified: branches/proto/v3/libs/unordered/test/unordered/swap_tests.cpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/unordered/swap_tests.cpp (original)
+++ branches/proto/v3/libs/unordered/test/unordered/swap_tests.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,5 +1,5 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 
@@ -8,12 +8,15 @@
 #include <iterator>
 #include <boost/unordered_set.hpp>
 #include <boost/unordered_map.hpp>
-#include <boost/detail/lightweight_test.hpp>
+#include "../helpers/test.hpp"
 #include "../objects/test.hpp"
 #include "../helpers/random_values.hpp"
 #include "../helpers/tracker.hpp"
 #include "../helpers/invariants.hpp"
 
+namespace swap_tests
+{
+
 test::seed_t seed(783472);
 
 template <class X>
@@ -114,22 +117,18 @@
 #endif
 }
 
-int main()
-{
- boost::unordered_set<test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_set;
- boost::unordered_multiset<test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_multiset;
- boost::unordered_map<test::object, test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_map;
- boost::unordered_multimap<test::object, test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_multimap;
-
- swap_tests1(test_set);
- swap_tests1(test_multiset);
- swap_tests1(test_map);
- swap_tests1(test_multimap);
-
- swap_tests2(test_set);
- swap_tests2(test_multiset);
- swap_tests2(test_map);
- swap_tests2(test_multimap);
+boost::unordered_set<test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_set;
+boost::unordered_multiset<test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_multiset;
+boost::unordered_map<test::object, test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_map;
+boost::unordered_multimap<test::object, test::object, test::hash, test::equal_to, test::allocator<test::object> >* test_multimap;
+
+UNORDERED_TEST(swap_tests1,
+ ((test_set)(test_multiset)(test_map)(test_multimap))
+)
+
+UNORDERED_TEST(swap_tests2,
+ ((test_set)(test_multiset)(test_map)(test_multimap))
+)
 
- return boost::report_errors();
 }
+RUN_TESTS()

Modified: branches/proto/v3/libs/unordered/test/unordered/unnecessary_copy_tests.cpp
==============================================================================
--- branches/proto/v3/libs/unordered/test/unordered/unnecessary_copy_tests.cpp (original)
+++ branches/proto/v3/libs/unordered/test/unordered/unnecessary_copy_tests.cpp 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1,13 +1,14 @@
 
-// Copyright 2006-2007 Daniel James.
+// Copyright 2006-2008 Daniel James.
 // 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)
 
 #include <boost/unordered_set.hpp>
 #include <boost/unordered_map.hpp>
-#include <boost/detail/lightweight_test.hpp>
+#include "../helpers/test.hpp"
 
-namespace test {
+namespace unnecessary_copy_tests
+{
     struct count_copies
     {
         static int count;
@@ -17,22 +18,24 @@
        count_copies& operator=(count_copies const&);
     };
 
- bool operator==(test::count_copies const&, test::count_copies const&) {
+ bool operator==(count_copies const&, count_copies const&) {
         return true;
     }
 }
 
 #if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP)
-namespace boost {
+namespace boost
 #else
-namespace test {
+namespace unnecessary_copy_tests
 #endif
- std::size_t hash_value(test::count_copies const&) {
+{
+ std::size_t hash_value(unnecessary_copy_tests::count_copies const&) {
         return 0;
     }
 }
 
-namespace test {
+namespace unnecessary_copy_tests
+{
     int count_copies::count;
 
     template <class T>
@@ -45,14 +48,13 @@
         x.insert(a);
         BOOST_TEST(count_copies::count == 2);
     }
-}
 
-int main()
-{
- test::unnecessary_copy_test((boost::unordered_set<test::count_copies>*) 0);
- test::unnecessary_copy_test((boost::unordered_multiset<test::count_copies>*) 0);
- test::unnecessary_copy_test((boost::unordered_map<int, test::count_copies>*) 0);
- test::unnecessary_copy_test((boost::unordered_multimap<int, test::count_copies>*) 0);
+ boost::unordered_set<count_copies>* set;
+ boost::unordered_multiset<count_copies>* multiset;
+ boost::unordered_map<int, count_copies>* map;
+ boost::unordered_multimap<int, count_copies>* multimap;
 
- return boost::report_errors();
+ UNORDERED_TEST(unnecessary_copy_test, ((set)(multiset)(map)(multimap)))
 }
+
+RUN_TESTS()

Modified: branches/proto/v3/more/getting_started/detail/links.rst
==============================================================================
--- branches/proto/v3/more/getting_started/detail/links.rst (original)
+++ branches/proto/v3/more/getting_started/detail/links.rst 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -12,5 +12,5 @@
 .. _Boost.Serialization: ../../libs/serialization/index.html
 .. _Boost.Signals: ../../libs/signals/index.html
 .. _Boost.Test: ../../libs/test/index.html
-.. _Boost.Thread: ../../doc/html/thread/build.html#thread.build
+.. _Boost.Thread: ../../doc/html/thread.html
 .. _Boost.Wave: ../../libs/wave/index.html

Modified: branches/proto/v3/more/getting_started/unix-variants.html
==============================================================================
--- branches/proto/v3/more/getting_started/unix-variants.html (original)
+++ branches/proto/v3/more/getting_started/unix-variants.html 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -187,7 +187,7 @@
 <li><a class="reference external" href="../../libs/regex/index.html">Boost.Regex</a></li>
 <li><a class="reference external" href="../../libs/serialization/index.html">Boost.Serialization</a></li>
 <li><a class="reference external" href="../../libs/signals/index.html">Boost.Signals</a></li>
-<li><a class="reference external" href="../../doc/html/thread/build.html#thread.build">Boost.Thread</a></li>
+<li><a class="reference external" href="../../doc/html/thread.html">Boost.Thread</a></li>
 <li><a class="reference external" href="../../libs/wave/index.html">Boost.Wave</a></li>
 </ul>
 <p>A few libraries have optional separately-compiled binaries:</p>

Modified: branches/proto/v3/more/getting_started/windows.html
==============================================================================
--- branches/proto/v3/more/getting_started/windows.html (original)
+++ branches/proto/v3/more/getting_started/windows.html 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -180,7 +180,7 @@
 <li><a class="reference external" href="../../libs/regex/index.html">Boost.Regex</a></li>
 <li><a class="reference external" href="../../libs/serialization/index.html">Boost.Serialization</a></li>
 <li><a class="reference external" href="../../libs/signals/index.html">Boost.Signals</a></li>
-<li><a class="reference external" href="../../doc/html/thread/build.html#thread.build">Boost.Thread</a></li>
+<li><a class="reference external" href="../../doc/html/thread.html">Boost.Thread</a></li>
 <li><a class="reference external" href="../../libs/wave/index.html">Boost.Wave</a></li>
 </ul>
 <p>A few libraries have optional separately-compiled binaries:</p>

Modified: branches/proto/v3/status/explicit-failures-markup.xml
==============================================================================
--- branches/proto/v3/status/explicit-failures-markup.xml (original)
+++ branches/proto/v3/status/explicit-failures-markup.xml 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -1461,8 +1461,38 @@
             <toolset name="mingw"/>
             <toolset name="hp_cxx*"/>
             <toolset name="intel-win32-8_1"/>
+ <toolset name="sun-5.7"/>
+ <toolset name="sun-5.8"/>
+ <toolset name="sun-5.9"/>
+ <toolset name="pathscale*"/>
+ <note author="Eric Niebler">
+ This compiler does not support detection of
+ const rvalues.
+ </note>
+ </mark-expected-failures>
+ <mark-expected-failures>
+ <test name="rvalue_const_r"/>
+ <toolset name="msvc-6.5*"/>
+ <toolset name="msvc-7.0"/>
+ <toolset name="borland-5.6*"/>
+ <toolset name="borland-5.8*"/>
+ <toolset name="borland-5.9*"/>
+ <toolset name="gcc-2*"/>
+ <toolset name="gcc-3.2*"/>
+ <toolset name="gcc-3_3-darwin"/>
+ <toolset name="intel-linux"/>
+ <toolset name="vacpp"/>
+ <toolset name="cw-8.3"/>
+ <toolset name="cw-9.4"/>
+ <toolset name="cw-9.5-darwin"/>
+ <toolset name="sunpro*"/>
+ <toolset name="mingw"/>
+ <toolset name="hp_cxx*"/>
+ <toolset name="intel-win32-8_1"/>
+ <toolset name="sun-5.7"/>
             <toolset name="sun-5.8"/>
             <toolset name="sun-5.9"/>
+ <toolset name="pathscale*"/>
             <note author="Eric Niebler">
                 This compiler does not support detection of
                 const rvalues.
@@ -1477,6 +1507,24 @@
             <toolset name="borland-5.9*"/>
             <toolset name="hp_cxx*"/>
             <toolset name="sunpro*"/>
+ <toolset name="sun-5.7"/>
+ <toolset name="sun-5.8"/>
+ <toolset name="sun-5.9"/>
+ <note author="Eric Niebler">
+ This compiler does not support detection of
+ rvalues.
+ </note>
+ </mark-expected-failures>
+ <mark-expected-failures>
+ <test name="rvalue_nonconst_r"/>
+ <toolset name="msvc-6.5*"/>
+ <toolset name="msvc-7.0"/>
+ <toolset name="borland-5.6*"/>
+ <toolset name="borland-5.8*"/>
+ <toolset name="borland-5.9*"/>
+ <toolset name="hp_cxx*"/>
+ <toolset name="sunpro*"/>
+ <toolset name="sun-5.7"/>
             <toolset name="sun-5.8"/>
             <toolset name="sun-5.9"/>
             <note author="Eric Niebler">
@@ -1504,16 +1552,6 @@
                 ADL which these compilers do not support.
             </note>
         </mark-expected-failures>
- <mark-expected-failures>
- <test name="noncopyable"/>
- <toolset name="sun-5.8"/>
- <note author="Eric Niebler">
- is_base_and_derived&lt;&gt; is broken on this compiler, but
- the problem can be worked around by specializing
- boost::foreach::is_noncopyable&lt;&gt; for collection
- types that are noncopyable.
- </note>
- </mark-expected-failures>
     </library>
 
     <!-- format -->
@@ -4110,6 +4148,21 @@
             </note>
         </mark-unusable>
         <mark-expected-failures>
+ <test name="object"/>
+ <toolset name="intel-10.*"/>
+ <note author="David Abrahams">
+
+ This compiler has a bug that causes silent misbehavior at runtime
+ when each of an assignment expression follows one of the following patterns:
+ <em>expr</em><code>.attr(</code><em>name</em><code>)</code>
+ or <em>expr</em><code>[</code><em>item</em><code>]</code>,
+ where <em>expr</em>
+ is-a <code>boost::python::object</code>. We've been
+ unable to find a workaround.
+
+ </note>
+ </mark-expected-failures>
+ <mark-expected-failures>
             <test name="args"/>
             <test name="auto_ptr"/>
             <test name="builtin_convertors"/>

Modified: branches/proto/v3/tools/build/v2/tools/intel-darwin.jam
==============================================================================
--- branches/proto/v3/tools/build/v2/tools/intel-darwin.jam (original)
+++ branches/proto/v3/tools/build/v2/tools/intel-darwin.jam 2008-03-28 10:52:50 EDT (Fri, 28 Mar 2008)
@@ -117,8 +117,8 @@
 
 #
 cpu-type-em64t = prescott nocona ;
-# flags intel-darwin.compile OPTIONS <instruction-set>$(cpu-type-em64t)/<address-model>32 : -mcmodel=small ;
-flags intel-darwin.compile OPTIONS <instruction-set>$(cpu-type-em64t)/<address-model>64 : -mcmodel=large ;
+flags intel-darwin.compile OPTIONS <instruction-set>$(cpu-type-em64t)/<address-model>32 : -m32; # -mcmodel=small ;
+flags intel-darwin.compile OPTIONS <instruction-set>$(cpu-type-em64t)/<address-model>64 : -m64; # -mcmodel=large ;
 
 flags intel-darwin.compile.c OPTIONS <warnings>off : -w0 ;
 flags intel-darwin.compile.c OPTIONS <warnings>on : -w1 ;


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