Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r64007 - in trunk: boost/functional/hash libs/functional/hash/doc libs/functional/hash/test
From: daniel_james_at_[hidden]
Date: 2010-07-14 04:17:53


Author: danieljames
Date: 2010-07-14 04:17:48 EDT (Wed, 14 Jul 2010)
New Revision: 64007
URL: http://svn.boost.org/trac/boost/changeset/64007

Log:
Actually, make the change to hash opt-in, rather than opt-out. It's a bit late to introduce a breaking change.
Text files modified:
   trunk/boost/functional/hash/hash.hpp | 2 +-
   trunk/libs/functional/hash/doc/changes.qbk | 15 ++++++++++-----
   trunk/libs/functional/hash/test/Jamfile.v2 | 1 +
   3 files changed, 12 insertions(+), 6 deletions(-)

Modified: trunk/boost/functional/hash/hash.hpp
==============================================================================
--- trunk/boost/functional/hash/hash.hpp (original)
+++ trunk/boost/functional/hash/hash.hpp 2010-07-14 04:17:48 EDT (Wed, 14 Jul 2010)
@@ -30,7 +30,7 @@
 
 namespace boost
 {
-#if !defined(BOOST_HASH_ALLOW_IMPLICIT_CASTS)
+#if defined(BOOST_HASH_NO_IMPLICIT_CASTS)
 
     // If you get a static assertion here, it's because hash_value
     // isn't declared for your type.

Modified: trunk/libs/functional/hash/doc/changes.qbk
==============================================================================
--- trunk/libs/functional/hash/doc/changes.qbk (original)
+++ trunk/libs/functional/hash/doc/changes.qbk 2010-07-14 04:17:48 EDT (Wed, 14 Jul 2010)
@@ -108,10 +108,15 @@
 
 [h2 Boost 1.44.0]
 
-* Prevent implicit conversions when calling `hash_value`. If you find
- that the new version breaks your code, you can enable the old
- behaviour by defining `BOOST_HASH_ALLOW_IMPLICIT_CASTS` - although
- I would recommend that you update your code to work with the new
- version.
+* Add option to prevent implicit conversions when calling `hash_value` by
+ defining `BOOST_HASH_NO_IMPLICIT_CASTS`. When using `boost::hash`
+ for a type that does not have `hash_value` declared but does have
+ an implicit conversion to a type that does, it would use that
+ implicit conversion to hash it. Which can sometimes go very wrong,
+ e.g. using a conversion to bool and only hashing to 2 possible
+ values. Since fixing this is a breaking change and was only
+ approached quite late in the release cycle with little discussion
+ it's opt-in for now. This, or something like it, will become the
+ default in a future version.
 
 [endsect]

Modified: trunk/libs/functional/hash/test/Jamfile.v2
==============================================================================
--- trunk/libs/functional/hash/test/Jamfile.v2 (original)
+++ trunk/libs/functional/hash/test/Jamfile.v2 2010-07-14 04:17:48 EDT (Wed, 14 Jul 2010)
@@ -7,6 +7,7 @@
 
 project hash-tests
     : requirements
+ <define>BOOST_HASH_NO_IMPLICIT_CASTS
         <warnings>all
         <toolset>intel:<warnings>on
         <toolset>intel:<cxxflags>-strict-ansi


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