$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r56566 - trunk/boost/spirit/home/qi/operator
From: joel_at_[hidden]
Date: 2009-10-04 01:07:07
Author: djowel
Date: 2009-10-04 01:07:07 EDT (Sun, 04 Oct 2009)
New Revision: 56566
URL: http://svn.boost.org/trac/boost/changeset/56566
Log:
Tweaks for recursive_wrapper
Text files modified: 
   trunk/boost/spirit/home/qi/operator/alternative.hpp |    14 ++++++++++++--                          
   1 files changed, 12 insertions(+), 2 deletions(-)
Modified: trunk/boost/spirit/home/qi/operator/alternative.hpp
==============================================================================
--- trunk/boost/spirit/home/qi/operator/alternative.hpp	(original)
+++ trunk/boost/spirit/home/qi/operator/alternative.hpp	2009-10-04 01:07:07 EDT (Sun, 04 Oct 2009)
@@ -40,11 +40,19 @@
 namespace boost { namespace spirit { namespace qi
 {
     namespace detail
-    {       
+    {
+        template <typename T>
+        struct get_variant_element
+            : mpl::identity<T> {};
+
+        template <typename T>
+        struct get_variant_element<recursive_wrapper<T> > 
+            : mpl::identity<T> {};
+            
         template <typename T>
         struct get_variant_types;
 
-#define BOOST_SPIRIT_IDENTITY(z, n, data) mpl::identity<BOOST_PP_CAT(T, n)>
+#define BOOST_SPIRIT_IDENTITY(z, n, data) get_variant_element<BOOST_PP_CAT(T, n)>
         template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
         struct get_variant_types<variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
         {
@@ -86,6 +94,7 @@
           , Context& context, Skipper const& skipper
           , Attribute& attr, mpl::true_) const
         {
+            // This branch is chosen if attr *is not* a variant
             detail::alternative_function<Iterator, Context, Skipper, Attribute>
                 f(first, last, context, skipper, attr);
 
@@ -99,6 +108,7 @@
           , Context& context, Skipper const& skipper
           , Attribute& attr, mpl::false_) const
         {
+            // This branch is chosen if attr *is* a variant
             detail::alternative_function<Iterator, Context, Skipper, Attribute>
                 f(first, last, context, skipper, attr);