$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r66150 - trunk/boost/proto
From: eric_at_[hidden]
Date: 2010-10-22 17:07:28
Author: eric_niebler
Date: 2010-10-22 17:07:23 EDT (Fri, 22 Oct 2010)
New Revision: 66150
URL: http://svn.boost.org/trac/boost/changeset/66150
Log:
add nested which typedef for matches with switch_ and if_ for Phoenix-style extensible grammars
Text files modified: 
   trunk/boost/proto/matches.hpp |    25 +++++++++++++++----------               
   1 files changed, 15 insertions(+), 10 deletions(-)
Modified: trunk/boost/proto/matches.hpp
==============================================================================
--- trunk/boost/proto/matches.hpp	(original)
+++ trunk/boost/proto/matches.hpp	2010-10-22 17:07:23 EDT (Fri, 22 Oct 2010)
@@ -391,15 +391,18 @@
                   , matches_<proto::basic_expr<Tag, Args, Arity>, typename Then::proto_grammar>
                   , matches_<proto::basic_expr<Tag, Args, Arity>, typename Else::proto_grammar>
                 >::type
-            {};
-
-            template<typename Tag, typename Args, long Arity, typename If>
-            struct matches_<proto::basic_expr<Tag, Args, Arity>, proto::if_<If> >
-              : detail::uncvref<
-					typename when<_, If>::
-                        template impl<proto::expr<Tag, Args, Arity>, int, int>::result_type
-				>::type
-            {};
+            {
+                typedef
+                    typename mpl::if_c<
+                        remove_reference<
+                            typename when<_, If>::
+                                template impl<proto::expr<Tag, Args, Arity>, int, int>::result_type
+                        >::type::value
+                      , Then
+                      , Else
+                    >::type
+                which;
+            };
 
             // handle degenerate cases of proto::or_
             template<typename Expr>
@@ -440,7 +443,9 @@
                     proto::basic_expr<Tag, Args, Arity>
                   , typename Cases::template case_<Tag>::proto_grammar
                 >
-            {};
+            {
+                typedef typename Cases::template case_<Tag> which;
+            };
         }
 
         /// \brief A Boolean metafunction that evaluates whether a given