$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r74906 - in trunk/libs/spirit/test: karma qi
From: joel_at_[hidden]
Date: 2011-10-10 20:24:05
Author: djowel
Date: 2011-10-10 20:24:04 EDT (Mon, 10 Oct 2011)
New Revision: 74906
URL: http://svn.boost.org/trac/boost/changeset/74906
Log:
Added rvalue support for symbols %=
Text files modified: 
   trunk/libs/spirit/test/karma/symbols2.cpp |    28 +++++++++++++++++++---------            
   trunk/libs/spirit/test/qi/symbols2.cpp    |    38 ++++++++++++++++++++++++++------------  
   2 files changed, 45 insertions(+), 21 deletions(-)
Modified: trunk/libs/spirit/test/karma/symbols2.cpp
==============================================================================
--- trunk/libs/spirit/test/karma/symbols2.cpp	(original)
+++ trunk/libs/spirit/test/karma/symbols2.cpp	2011-10-10 20:24:04 EDT (Mon, 10 Oct 2011)
@@ -1,6 +1,6 @@
 //  Copyright (c) 2001-2011 Hartmut Kaiser
-// 
-//  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/config/warning_disable.hpp>
@@ -19,7 +19,7 @@
 namespace fusion = boost::fusion;
 
 template <typename T>
-inline std::vector<T> 
+inline std::vector<T>
 make_vector(T const& t1, T const& t2)
 {
     std::vector<T> v;
@@ -45,7 +45,7 @@
         rule<output_iterator_type> r2 = lit("Hartmut");
         rule<output_iterator_type> r3 = lit("Tom");
         rule<output_iterator_type> r4 = lit("Kim");
-        
+
         sym.add
             ('j', r1.alias())
             ('h', r2.alias())
@@ -53,11 +53,11 @@
             ('k', r4.alias())
         ;
 
-        boost::mpl::true_ f = 
+        boost::mpl::true_ f =
             boost::mpl::bool_<boost::spirit::traits::is_generator<
                 symbols<char, rule<output_iterator_type> > >::value>();
 
-        // silence stupid compiler warnings 
+        // silence stupid compiler warnings
         // i.e. MSVC warning C4189: 'f' : local variable is initialized but not referenced
         BOOST_TEST((f.value));
 
@@ -97,7 +97,7 @@
 
         symbols<char, rule<output_iterator_type, std::string()> > sym;
         rule<output_iterator_type, std::string()> r1 = string;
-        
+
         sym.add
             ('j', r1.alias())
             ('h', r1.alias())
@@ -105,11 +105,11 @@
             ('k', r1.alias())
         ;
 
-        boost::mpl::true_ f = 
+        boost::mpl::true_ f =
             boost::mpl::bool_<boost::spirit::traits::is_generator<
                 symbols<char, std::string> >::value>();
 
-        // silence stupid compiler warnings 
+        // silence stupid compiler warnings
         // i.e. MSVC warning C4189: 'f' : local variable is initialized but not referenced
         BOOST_TEST((f.value));
 
@@ -140,5 +140,15 @@
         BOOST_TEST((!test("", sym, 'h')));
     }
 
+    { // test for proto problem with rvalue references (10-11-2011)
+        symbols<char, std::string> sym;
+
+        sym += std::make_pair('j', "Joel");
+        sym += std::make_pair('h', "Hartmut");
+
+        BOOST_TEST((test("Joel", sym, 'j')));
+        BOOST_TEST((test("Hartmut", sym, 'h')));
+    }
+
     return boost::report_errors();
 }
Modified: trunk/libs/spirit/test/qi/symbols2.cpp
==============================================================================
--- trunk/libs/spirit/test/qi/symbols2.cpp	(original)
+++ trunk/libs/spirit/test/qi/symbols2.cpp	2011-10-10 20:24:04 EDT (Mon, 10 Oct 2011)
@@ -31,6 +31,11 @@
     char str[2];
 };
 
+std::string get_str(char const* str)
+{
+    return std::string(str);
+}
+
 int
 main()
 {
@@ -124,12 +129,12 @@
         BOOST_TEST(i == 2);
         BOOST_TEST(!test("c", r(phx::ref(sym))));
     }
-    
+
     { // find
-    
+
         symbols<char, int> sym;
         sym.add("a", 1)("b", 2);
-        
+
         BOOST_TEST(!sym.find("c"));
 
         BOOST_TEST(sym.find("a") && *sym.find("a") == 1);
@@ -142,14 +147,14 @@
         BOOST_TEST(sym.find("a") && *sym.find("a") == 1);
         BOOST_TEST(sym.find("b") && *sym.find("b") == 2);
         BOOST_TEST(sym.find("c") && *sym.find("c") == 0);
-        
+
         symbols<char, int> const_sym(sym);
 
         BOOST_TEST(const_sym.find("a") && *const_sym.find("a") == 1);
         BOOST_TEST(const_sym.find("b") && *const_sym.find("b") == 2);
         BOOST_TEST(const_sym.find("c") && *const_sym.find("c") == 0);
         BOOST_TEST(!const_sym.find("d"));
-        
+
         char const *str1 = "all";
         char const *first = str1, *last = str1 + 3;
         BOOST_TEST(*sym.prefix_find(first, last) == 1 && first == str1 + 1);
@@ -169,9 +174,9 @@
         symbols <char,int> sym3(sym);
         BOOST_TEST(sym3.name()=="test");
     }
-    
+
     { // Substrings
-    
+
         symbols<char, int> sym;
         BOOST_TEST(sym.at("foo") == 0);
         sym.at("foo") = 1;
@@ -184,10 +189,10 @@
         BOOST_TEST(!sym.find("foot"));
         BOOST_TEST(!sym.find("afoot"));
 
-        char const *str, *first, *last;        
+        char const *str, *first, *last;
         str = "foolish"; first = str; last = str + 7;
         BOOST_TEST(*sym.prefix_find(first, last) == 2 && first == str + 4);
-        
+
         first = str; last = str + 4;
         BOOST_TEST(*sym.prefix_find(first, last) == 2 && first == str + 4);
 
@@ -200,13 +205,13 @@
         first = str; last = str + 2;
         BOOST_TEST(!sym.prefix_find(first, last) && first == str);
     }
-    
+
     {
         // remove bug
-        
+
         std::string s;
         symbols<char, double> vars;
-        
+
         vars.add("l1", 12.0);
         vars.add("l2", 0.0);
         vars.remove("l2");
@@ -215,5 +220,14 @@
         BOOST_TEST(d != 0);
     }
 
+    { // test for proto problem with rvalue references (10-11-2011)
+        symbols<char, int> sym;
+        sym += get_str("Joel");
+        sym += get_str("Ruby");
+
+        BOOST_TEST((test("Joel", sym)));
+        BOOST_TEST((test("Ruby", sym)));
+    }
+
     return boost::report_errors();
 }