Boost logo

Boost-Commit :

From: nielsdekker_at_[hidden]
Date: 2008-07-25 14:48:09


Author: niels_dekker
Date: 2008-07-25 14:48:09 EDT (Fri, 25 Jul 2008)
New Revision: 47808
URL: http://svn.boost.org/trac/boost/changeset/47808

Log:
Added test_adl_barrier to swap/test, as discussed with Joseph Gauterin.

Added:
   trunk/libs/utility/swap/test/test_adl_barrier.cpp (contents, props changed)
Text files modified:
   trunk/libs/utility/swap/test/Jamfile.v2 | 5 ++---
   1 files changed, 2 insertions(+), 3 deletions(-)

Modified: trunk/libs/utility/swap/test/Jamfile.v2
==============================================================================
--- trunk/libs/utility/swap/test/Jamfile.v2 (original)
+++ trunk/libs/utility/swap/test/Jamfile.v2 2008-07-25 14:48:09 EDT (Fri, 25 Jul 2008)
@@ -20,7 +20,6 @@
     [ run specialized_in_global.cpp ../../../test/build//boost_test_exec_monitor/<link>static ]
     [ run specialized_in_other.cpp ../../../test/build//boost_test_exec_monitor/<link>static ]
     [ run specialized_in_std.cpp ../../../test/build//boost_test_exec_monitor/<link>static ]
- [ run swap_arrays.cpp ../../../test/build//boost_test_exec_monitor/<link>static ]
+ [ run test_adl_barrier.cpp ../../../test/build//boost_test_exec_monitor/<link>static ]
+ [ run swap_arrays.cpp ../../../test/build//boost_test_exec_monitor/<link>static ]
     ;
-
-

Added: trunk/libs/utility/swap/test/test_adl_barrier.cpp
==============================================================================
--- (empty file)
+++ trunk/libs/utility/swap/test/test_adl_barrier.cpp 2008-07-25 14:48:09 EDT (Fri, 25 Jul 2008)
@@ -0,0 +1,36 @@
+// Copyright (c) 2008 Joseph Gauterin, Niels Dekker
+//
+// 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)
+
+// boost::swap internally does an unqualified function call to swap.
+// This could have led to ambiguity or infinite recursion, when the
+// objects to be swapped would themselves be from the boost namespace.
+// If so, boost::swap itself might be found by argument dependent lookup
+// (ADL). The implementation of boost::swap resolves this issue by
+// using a barrier namespace. The following test checks this "ADL barrier".
+
+#include <boost/utility/swap.hpp>
+#define BOOST_INCLUDE_MAIN
+#include <boost/test/test_tools.hpp>
+
+//Put test class in namespace boost
+namespace boost
+{
+ #include "./swap_test_class.hpp"
+}
+
+
+int test_main(int, char*[])
+{
+ boost::swap_test_class object1;
+ boost::swap_test_class object2;
+ boost::swap(object1,object2);
+
+ BOOST_CHECK_EQUAL(boost::swap_test_class::swap_count(),0);
+ BOOST_CHECK_EQUAL(boost::swap_test_class::copy_count(),3);
+
+ return 0;
+}
+


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