$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r82631 - in trunk/libs/fusion/test: functional sequence
From: joel_at_[hidden]
Date: 2013-01-27 05:14:18
Author: djowel
Date: 2013-01-27 05:14:16 EST (Sun, 27 Jan 2013)
New Revision: 82631
URL: http://svn.boost.org/trac/boost/changeset/82631
Log:
Workaround for some tests on C++11 to allow disambiguation of && and const& arguments to ctors
Text files modified: 
   trunk/libs/fusion/test/functional/invoke.cpp                 |    14 ++++++++++++++                          
   trunk/libs/fusion/test/functional/invoke_function_object.cpp |    14 ++++++++++++++                          
   trunk/libs/fusion/test/functional/invoke_procedure.cpp       |    15 +++++++++++++++                         
   trunk/libs/fusion/test/sequence/value_at.hpp                 |    17 +++++++++++++++--                       
   4 files changed, 58 insertions(+), 2 deletions(-)
Modified: trunk/libs/fusion/test/functional/invoke.cpp
==============================================================================
--- trunk/libs/fusion/test/functional/invoke.cpp	(original)
+++ trunk/libs/fusion/test/functional/invoke.cpp	2013-01-27 05:14:16 EST (Sun, 27 Jan 2013)
@@ -10,6 +10,10 @@
 #include <boost/fusion/functional/invocation/invoke.hpp>
 #include <boost/detail/lightweight_test.hpp>
 
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+#include <functional>
+#endif
+
 #include <memory>
 #include <boost/noncopyable.hpp>
 
@@ -371,7 +375,17 @@
     vector0 v0;
     vector1 v1(element1);
     vector2 v2(element1, element2);
+
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+    // Note: C++11 will pickup the rvalue overload for the d argument
+    // since we do not have all permutations (expensive!) for all const&
+    // and && arguments. We either have all && or all const& arguments only.
+    // For that matter, use std::ref to disambiguate the call.
+
+    vector3 v3(element1, element2, std::ref(element3));
+#else
     vector3 v3(element1, element2, element3);
+#endif
 
     test_sequence(v0);
     test_sequence(v1);
Modified: trunk/libs/fusion/test/functional/invoke_function_object.cpp
==============================================================================
--- trunk/libs/fusion/test/functional/invoke_function_object.cpp	(original)
+++ trunk/libs/fusion/test/functional/invoke_function_object.cpp	2013-01-27 05:14:16 EST (Sun, 27 Jan 2013)
@@ -10,6 +10,10 @@
 #include <boost/fusion/functional/invocation/invoke_function_object.hpp>
 #include <boost/detail/lightweight_test.hpp>
 
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+#include <functional>
+#endif
+
 #include <boost/type_traits/is_same.hpp>
 
 #include <memory>
@@ -209,7 +213,17 @@
     vector0 v0;
     vector1 v1(element1);
     vector2 v2(element1, element2);
+
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+    // Note: C++11 will pickup the rvalue overload for the d argument
+    // since we do not have all permutations (expensive!) for all const&
+    // and && arguments. We either have all && or all const& arguments only.
+    // For that matter, use std::ref to disambiguate the call.
+
+    vector3 v3(element1, element2, std::ref(element3));
+#else
     vector3 v3(element1, element2, element3);
+#endif
 
     test_sequence(v0);
     test_sequence(v1);
Modified: trunk/libs/fusion/test/functional/invoke_procedure.cpp
==============================================================================
--- trunk/libs/fusion/test/functional/invoke_procedure.cpp	(original)
+++ trunk/libs/fusion/test/functional/invoke_procedure.cpp	2013-01-27 05:14:16 EST (Sun, 27 Jan 2013)
@@ -10,6 +10,10 @@
 #include <boost/fusion/functional/invocation/invoke_procedure.hpp>
 #include <boost/detail/lightweight_test.hpp>
 
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+#include <functional>
+#endif
+
 #include <memory>
 #include <boost/noncopyable.hpp>
 
@@ -256,8 +260,19 @@
 
     vector0 v0;
     vector1 v1(element1);
+
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+    // Note: C++11 will pickup the rvalue overload for the d argument
+    // since we do not have all permutations (expensive!) for all const&
+    // and && arguments. We either have all && or all const& arguments only.
+    // For that matter, use std::ref to disambiguate the call.
+
+    vector2 v2(std::ref(element1), element2);
+    vector3 v3(std::ref(element1), element2, std::ref(element3));
+#else
     vector2 v2(element1, element2);
     vector3 v3(element1, element2, element3);
+#endif
 
     test_sequence(v0);
     test_sequence(v1);
Modified: trunk/libs/fusion/test/sequence/value_at.hpp
==============================================================================
--- trunk/libs/fusion/test/sequence/value_at.hpp	(original)
+++ trunk/libs/fusion/test/sequence/value_at.hpp	2013-01-27 05:14:16 EST (Sun, 27 Jan 2013)
@@ -2,7 +2,7 @@
     Copyright (c) 1999-2003 Jaakko Jarvi
     Copyright (c) 2001-2011 Joel de Guzman
 
-    Distributed under the Boost Software License, Version 1.0. (See accompanying 
+    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/detail/lightweight_test.hpp>
@@ -11,6 +11,10 @@
 #include <boost/static_assert.hpp>
 #include <iostream>
 
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+#include <functional>
+#endif
+
 #if !defined(FUSION_AT)
 #define FUSION_AT at_c
 #endif
@@ -35,7 +39,16 @@
 
     double d = 2.7;
     A a;
+#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
+    // Note: C++11 will pickup the rvalue overload for the d argument
+    // since we do not have all permutations (expensive!) for all const&
+    // and && arguments. We either have all && or all const& arguments only.
+    // For that matter, use std::ref to disambiguate the call.
+
+    FUSION_SEQUENCE<int, double&, const A&, int> t(1, std::ref(d), a, 2);
+#else
     FUSION_SEQUENCE<int, double&, const A&, int> t(1, d, a, 2);
+#endif
     const FUSION_SEQUENCE<int, double&, const A, int> ct(t);
 
     int i  = FUSION_AT<0>(t);
@@ -66,7 +79,7 @@
 
     ++FUSION_AT<0>(t);
     BOOST_TEST(FUSION_AT<0>(t) == 6);
-    
+
     typedef FUSION_SEQUENCE<int, float> seq_type;
 
     BOOST_STATIC_ASSERT(!(