Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r70028 - in trunk/libs/unordered/test: objects unordered
From: dnljms_at_[hidden]
Date: 2011-03-16 17:34:09


Author: danieljames
Date: 2011-03-16 17:34:08 EDT (Wed, 16 Mar 2011)
New Revision: 70028
URL: http://svn.boost.org/trac/boost/changeset/70028

Log:
Don't require explicit conversion in pairs in unordered's insert tests.

In the draft standard the std::pair constructor from another pair is
only considered when overloading if both members are implicitly
constructible to their corresponding members. This breaks one of the
unordered tests which required an explicit conversion, so change it to
only require an implicit conversion.
Text files modified:
   trunk/libs/unordered/test/objects/test.hpp | 27 +++++++++++++++++++++++++++
   trunk/libs/unordered/test/unordered/insert_tests.cpp | 4 ++--
   2 files changed, 29 insertions(+), 2 deletions(-)

Modified: trunk/libs/unordered/test/objects/test.hpp
==============================================================================
--- trunk/libs/unordered/test/objects/test.hpp (original)
+++ trunk/libs/unordered/test/objects/test.hpp 2011-03-16 17:34:08 EDT (Wed, 16 Mar 2011)
@@ -20,11 +20,13 @@
     // Note that the default hash function will work for any equal_to (but not
     // very well).
     class object;
+ class implicitly_convertible;
     class hash;
     class less;
     class equal_to;
     template <class T> class allocator;
     object generate(object const*);
+ implicitly_convertible generate(implicitly_convertible const*);
 
     class object : globally_counted_object
     {
@@ -64,6 +66,31 @@
         }
     };
 
+ class implicitly_convertible : globally_counted_object
+ {
+ int tag1_, tag2_;
+ public:
+
+ explicit implicitly_convertible(int t1 = 0, int t2 = 0)
+ : tag1_(t1), tag2_(t2)
+ {}
+
+ operator object() const
+ {
+ return object(tag1_, tag2_);
+ }
+
+ friend implicitly_convertible generate(implicitly_convertible const*) {
+ int* x = 0;
+ return implicitly_convertible(generate(x), generate(x));
+ }
+
+ friend std::ostream& operator<<(std::ostream& out, implicitly_convertible const& o)
+ {
+ return out<<"("<<o.tag1_<<","<<o.tag2_<<")";
+ }
+ };
+
     class hash
     {
         int type_;

Modified: trunk/libs/unordered/test/unordered/insert_tests.cpp
==============================================================================
--- trunk/libs/unordered/test/unordered/insert_tests.cpp (original)
+++ trunk/libs/unordered/test/unordered/insert_tests.cpp 2011-03-16 17:34:08 EDT (Wed, 16 Mar 2011)
@@ -372,10 +372,10 @@
     std::cerr<<"map_insert_range_test2\n";
 
     typedef test::list<
- std::pair<BOOST_DEDUCED_TYPENAME X::key_type const, int>
+ std::pair<BOOST_DEDUCED_TYPENAME X::key_type const, test::implicitly_convertible>
> list;
     test::random_values<
- boost::unordered_map<BOOST_DEDUCED_TYPENAME X::key_type, int>
+ boost::unordered_map<BOOST_DEDUCED_TYPENAME X::key_type, test::implicitly_convertible>
> v(1000, generator);
     list l(v.begin(), v.end());
 


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