$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r70687 - in trunk: boost/spirit/home/karma/numeric boost/spirit/home/karma/stream boost/spirit/home/lex/lexer/lexertl boost/spirit/home/qi/numeric boost/spirit/home/support boost/spirit/home/support/detail boost/spirit/include libs/spirit/test libs/spirit/test/lex libs/spirit/test/qi
From: hartmut.kaiser_at_[hidden]
Date: 2011-03-28 20:11:47
Author: hkaiser
Date: 2011-03-28 20:11:41 EDT (Mon, 28 Mar 2011)
New Revision: 70687
URL: http://svn.boost.org/trac/boost/changeset/70687
Log:
Spirit: more adjustments for Phoenix V3
Added:
   trunk/boost/spirit/home/support/detail/is_spirit_tag.hpp   (contents, props changed)
Text files modified: 
   trunk/boost/spirit/home/karma/numeric/int.hpp                 |     6                                         
   trunk/boost/spirit/home/karma/numeric/uint.hpp                |     6                                         
   trunk/boost/spirit/home/karma/stream/stream.hpp               |     6                                         
   trunk/boost/spirit/home/lex/lexer/lexertl/wrap_action.hpp     |    34 ---                                     
   trunk/boost/spirit/home/qi/numeric/int.hpp                    |     6                                         
   trunk/boost/spirit/home/qi/numeric/real.hpp                   |     2                                         
   trunk/boost/spirit/home/qi/numeric/uint.hpp                   |     6                                         
   trunk/boost/spirit/home/support/char_class.hpp                |   330 ++++++++++++++++++++--------------------
   trunk/boost/spirit/home/support/lazy.hpp                      |     6                                         
   trunk/boost/spirit/home/support/terminal.hpp                  |    11                                         
   trunk/boost/spirit/include/phoenix_container.hpp              |     2                                         
   trunk/libs/spirit/test/Jamfile                                |     5                                         
   trunk/libs/spirit/test/lex/regression_file_iterator3.cpp      |     8                                         
   trunk/libs/spirit/test/qi/regression_numeric_alternatives.cpp |     7                                         
   trunk/libs/spirit/test/qi/terminal_ex.cpp                     |    65 +++++++                                 
   15 files changed, 278 insertions(+), 222 deletions(-)
Modified: trunk/boost/spirit/home/karma/numeric/int.hpp
==============================================================================
--- trunk/boost/spirit/home/karma/numeric/int.hpp	(original)
+++ trunk/boost/spirit/home/karma/numeric/int.hpp	2011-03-28 20:11:41 EDT (Mon, 28 Mar 2011)
@@ -22,6 +22,7 @@
 #include <boost/spirit/home/support/char_class.hpp>
 #include <boost/spirit/home/support/container.hpp>
 #include <boost/spirit/home/support/detail/get_encoding.hpp>
+#include <boost/spirit/home/support/detail/is_spirit_tag.hpp>
 #include <boost/spirit/home/karma/meta_compiler.hpp>
 #include <boost/spirit/home/karma/delimit_out.hpp>
 #include <boost/spirit/home/karma/auxiliary/lazy.hpp>
@@ -40,7 +41,10 @@
     namespace tag
     {
         template <typename T, unsigned Radix, bool force_sign>
-        struct int_generator {};
+        struct int_generator 
+        {
+            BOOST_SPIRIT_IS_TAG()
+        };
     }
 
     namespace karma
Modified: trunk/boost/spirit/home/karma/numeric/uint.hpp
==============================================================================
--- trunk/boost/spirit/home/karma/numeric/uint.hpp	(original)
+++ trunk/boost/spirit/home/karma/numeric/uint.hpp	2011-03-28 20:11:41 EDT (Mon, 28 Mar 2011)
@@ -22,6 +22,7 @@
 #include <boost/spirit/home/support/char_class.hpp>
 #include <boost/spirit/home/support/container.hpp>
 #include <boost/spirit/home/support/detail/get_encoding.hpp>
+#include <boost/spirit/home/support/detail/is_spirit_tag.hpp>
 #include <boost/spirit/home/karma/meta_compiler.hpp>
 #include <boost/spirit/home/karma/delimit_out.hpp>
 #include <boost/spirit/home/karma/auxiliary/lazy.hpp>
@@ -39,7 +40,10 @@
     namespace tag
     {
         template <typename T, unsigned Radix>
-        struct uint_generator {};
+        struct uint_generator 
+        {
+            BOOST_SPIRIT_IS_TAG()
+        };
     }
 
     namespace karma
Modified: trunk/boost/spirit/home/karma/stream/stream.hpp
==============================================================================
--- trunk/boost/spirit/home/karma/stream/stream.hpp	(original)
+++ trunk/boost/spirit/home/karma/stream/stream.hpp	2011-03-28 20:11:41 EDT (Mon, 28 Mar 2011)
@@ -15,6 +15,7 @@
 #include <boost/spirit/home/support/container.hpp>
 #include <boost/spirit/home/support/detail/hold_any.hpp>
 #include <boost/spirit/home/support/detail/get_encoding.hpp>
+#include <boost/spirit/home/support/detail/is_spirit_tag.hpp>
 #include <boost/spirit/home/karma/domain.hpp>
 #include <boost/spirit/home/karma/meta_compiler.hpp>
 #include <boost/spirit/home/karma/delimit_out.hpp>
@@ -37,7 +38,10 @@
     namespace tag
     {
         template <typename Char = char>
-        struct stream_tag {};
+        struct stream_tag 
+        {
+            BOOST_SPIRIT_IS_TAG()
+        };
     }
 
     namespace karma
Modified: trunk/boost/spirit/home/lex/lexer/lexertl/wrap_action.hpp
==============================================================================
--- trunk/boost/spirit/home/lex/lexer/lexertl/wrap_action.hpp	(original)
+++ trunk/boost/spirit/home/lex/lexer/lexertl/wrap_action.hpp	2011-03-28 20:11:41 EDT (Mon, 28 Mar 2011)
@@ -29,44 +29,14 @@
           , typename IdType>
         struct wrap_action
         {
-            // plain functions with 5 arguments and function objects are not 
-            // touched at all
+            // plain functions with 5 arguments, function objects (including 
+            // phoenix actors) are not touched at all
             template <typename F>
             static FunctionType call(F const& f)
             {
                 return f;
             }
 
-            // wrap phoenix actor
-            struct phoenix_action
-            {
-                typedef void result_type;
-
-                template <typename F, typename T1, typename T2, typename T3
-                  , typename T4, typename T5>
-                struct result { typedef result_type type; };
-
-                template <typename Eval>
-                void operator()(phoenix::actor<Eval> const& f, Iterator& start
-                  , Iterator& end, BOOST_SCOPED_ENUM(pass_flags)& pass
-                  , IdType& id, Context& ctx) const
-                {
-                    f (start, end, pass, id, ctx);
-                }
-            };
-
-            template <typename Eval>
-            static FunctionType call(phoenix::actor<Eval> const& f)
-            {
-                using phoenix::arg_names::_1;
-                using phoenix::arg_names::_2;
-                using phoenix::arg_names::_3;
-                using phoenix::arg_names::_4;
-                using phoenix::arg_names::_5;
-                return phoenix::bind(phoenix_action(), phoenix::lambda[f], 
-                    _1, _2, _3, _4, _5);
-            }
-
             // semantic actions with 4 arguments
             template <typename F>
             static void arg4_action(F* f, Iterator& start, Iterator& end
Modified: trunk/boost/spirit/home/qi/numeric/int.hpp
==============================================================================
--- trunk/boost/spirit/home/qi/numeric/int.hpp	(original)
+++ trunk/boost/spirit/home/qi/numeric/int.hpp	2011-03-28 20:11:41 EDT (Mon, 28 Mar 2011)
@@ -19,6 +19,7 @@
 #include <boost/spirit/home/qi/parser.hpp>
 #include <boost/spirit/home/support/common_terminals.hpp>
 #include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/detail/is_spirit_tag.hpp>
 #include <boost/mpl/assert.hpp>
 #include <boost/type_traits/is_same.hpp>
 
@@ -28,7 +29,10 @@
     {
         template <typename T, unsigned Radix, unsigned MinDigits
                 , int MaxDigits>
-        struct int_parser {};
+        struct int_parser 
+        {
+            BOOST_SPIRIT_IS_TAG()
+        };
     }
 
     namespace qi
Modified: trunk/boost/spirit/home/qi/numeric/real.hpp
==============================================================================
--- trunk/boost/spirit/home/qi/numeric/real.hpp	(original)
+++ trunk/boost/spirit/home/qi/numeric/real.hpp	2011-03-28 20:11:41 EDT (Mon, 28 Mar 2011)
@@ -207,7 +207,7 @@
         template <typename Iterator, typename Context
           , typename Skipper, typename Attribute>
         bool parse(Iterator& first, Iterator const& last
-          , Context& context, Skipper const& skipper
+          , Context&, Skipper const& skipper
           , Attribute& attr) const
         {
             typedef detail::real_impl<T, RealPolicies> extract;
Modified: trunk/boost/spirit/home/qi/numeric/uint.hpp
==============================================================================
--- trunk/boost/spirit/home/qi/numeric/uint.hpp	(original)
+++ trunk/boost/spirit/home/qi/numeric/uint.hpp	2011-03-28 20:11:41 EDT (Mon, 28 Mar 2011)
@@ -19,6 +19,7 @@
 #include <boost/spirit/home/qi/parser.hpp>
 #include <boost/spirit/home/support/common_terminals.hpp>
 #include <boost/spirit/home/support/info.hpp>
+#include <boost/spirit/home/support/detail/is_spirit_tag.hpp>
 #include <boost/mpl/assert.hpp>
 #include <boost/type_traits/is_same.hpp>
 
@@ -28,7 +29,10 @@
     {
         template <typename T, unsigned Radix, unsigned MinDigits
                 , int MaxDigits>
-        struct uint_parser {};
+        struct uint_parser 
+        {
+            BOOST_SPIRIT_IS_TAG()
+        };
     }
 
     namespace qi
Modified: trunk/boost/spirit/home/support/char_class.hpp
==============================================================================
--- trunk/boost/spirit/home/support/char_class.hpp	(original)
+++ trunk/boost/spirit/home/support/char_class.hpp	2011-03-28 20:11:41 EDT (Mon, 28 Mar 2011)
@@ -18,6 +18,7 @@
 #include <boost/config.hpp>
 #include <boost/mpl/bool.hpp>
 #include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/detail/is_spirit_tag.hpp>
 #include <boost/type_traits/is_signed.hpp>
 #include <boost/type_traits/make_unsigned.hpp>
 #include <boost/type_traits/make_signed.hpp>
@@ -66,192 +67,192 @@
 
 namespace boost { namespace spirit { namespace tag
 {
-    struct char_ {};
-    struct string {};
+    struct char_ { BOOST_SPIRIT_IS_TAG() };
+    struct string { BOOST_SPIRIT_IS_TAG() };
 
     ///////////////////////////////////////////////////////////////////////////
     // classification tags
-    struct alnum {};
-    struct alpha {};
-    struct digit {};
-    struct xdigit {};
-    struct cntrl {};
-    struct graph {};
-    struct print {};
-    struct punct {};
-    struct space {};
-    struct blank {};
+    struct alnum { BOOST_SPIRIT_IS_TAG() };
+    struct alpha { BOOST_SPIRIT_IS_TAG() };
+    struct digit { BOOST_SPIRIT_IS_TAG() };
+    struct xdigit { BOOST_SPIRIT_IS_TAG() };
+    struct cntrl { BOOST_SPIRIT_IS_TAG() };
+    struct graph { BOOST_SPIRIT_IS_TAG() };
+    struct print { BOOST_SPIRIT_IS_TAG() };
+    struct punct { BOOST_SPIRIT_IS_TAG() };
+    struct space { BOOST_SPIRIT_IS_TAG() };
+    struct blank { BOOST_SPIRIT_IS_TAG() };
 
     ///////////////////////////////////////////////////////////////////////////
     // classification/conversion tags
-    struct no_case {};
-    struct lower {};
-    struct upper {};
-    struct lowernum {};
-    struct uppernum {};
-    struct ucs4 {};
-    struct encoding {};
+    struct no_case { BOOST_SPIRIT_IS_TAG() };
+    struct lower { BOOST_SPIRIT_IS_TAG() };
+    struct upper { BOOST_SPIRIT_IS_TAG() };
+    struct lowernum { BOOST_SPIRIT_IS_TAG() };
+    struct uppernum { BOOST_SPIRIT_IS_TAG() };
+    struct ucs4 { BOOST_SPIRIT_IS_TAG() };
+    struct encoding { BOOST_SPIRIT_IS_TAG() };
 
 #if defined(BOOST_SPIRIT_UNICODE)
 ///////////////////////////////////////////////////////////////////////////
 //  Unicode Major Categories
 ///////////////////////////////////////////////////////////////////////////
-    struct letter {};
-    struct mark {};
-    struct number {};
-    struct separator {};
-    struct other {};
-    struct punctuation {};
-    struct symbol {};
+    struct letter { BOOST_SPIRIT_IS_TAG() };
+    struct mark { BOOST_SPIRIT_IS_TAG() };
+    struct number { BOOST_SPIRIT_IS_TAG() };
+    struct separator { BOOST_SPIRIT_IS_TAG() };
+    struct other { BOOST_SPIRIT_IS_TAG() };
+    struct punctuation { BOOST_SPIRIT_IS_TAG() };
+    struct symbol { BOOST_SPIRIT_IS_TAG() };
 
 ///////////////////////////////////////////////////////////////////////////
 //  Unicode General Categories
 ///////////////////////////////////////////////////////////////////////////
-    struct uppercase_letter {};
-    struct lowercase_letter {};
-    struct titlecase_letter {};
-    struct modifier_letter {};
-    struct other_letter {};
-
-    struct nonspacing_mark {};
-    struct enclosing_mark {};
-    struct spacing_mark {};
-
-    struct decimal_number {};
-    struct letter_number {};
-    struct other_number {};
-
-    struct space_separator {};
-    struct line_separator {};
-    struct paragraph_separator {};
-
-    struct control {};
-    struct format {};
-    struct private_use {};
-    struct surrogate {};
-    struct unassigned {};
-
-    struct dash_punctuation {};
-    struct open_punctuation {};
-    struct close_punctuation {};
-    struct connector_punctuation {};
-    struct other_punctuation {};
-    struct initial_punctuation {};
-    struct final_punctuation {};
-
-    struct math_symbol {};
-    struct currency_symbol {};
-    struct modifier_symbol {};
-    struct other_symbol {};
+    struct uppercase_letter { BOOST_SPIRIT_IS_TAG() };
+    struct lowercase_letter { BOOST_SPIRIT_IS_TAG() };
+    struct titlecase_letter { BOOST_SPIRIT_IS_TAG() };
+    struct modifier_letter { BOOST_SPIRIT_IS_TAG() };
+    struct other_letter { BOOST_SPIRIT_IS_TAG() };
+
+    struct nonspacing_mark { BOOST_SPIRIT_IS_TAG() };
+    struct enclosing_mark { BOOST_SPIRIT_IS_TAG() };
+    struct spacing_mark { BOOST_SPIRIT_IS_TAG() };
+
+    struct decimal_number { BOOST_SPIRIT_IS_TAG() };
+    struct letter_number { BOOST_SPIRIT_IS_TAG() };
+    struct other_number { BOOST_SPIRIT_IS_TAG() };
+
+    struct space_separator { BOOST_SPIRIT_IS_TAG() };
+    struct line_separator { BOOST_SPIRIT_IS_TAG() };
+    struct paragraph_separator { BOOST_SPIRIT_IS_TAG() };
+
+    struct control { BOOST_SPIRIT_IS_TAG() };
+    struct format { BOOST_SPIRIT_IS_TAG() };
+    struct private_use { BOOST_SPIRIT_IS_TAG() };
+    struct surrogate { BOOST_SPIRIT_IS_TAG() };
+    struct unassigned { BOOST_SPIRIT_IS_TAG() };
+
+    struct dash_punctuation { BOOST_SPIRIT_IS_TAG() };
+    struct open_punctuation { BOOST_SPIRIT_IS_TAG() };
+    struct close_punctuation { BOOST_SPIRIT_IS_TAG() };
+    struct connector_punctuation { BOOST_SPIRIT_IS_TAG() };
+    struct other_punctuation { BOOST_SPIRIT_IS_TAG() };
+    struct initial_punctuation { BOOST_SPIRIT_IS_TAG() };
+    struct final_punctuation { BOOST_SPIRIT_IS_TAG() };
+
+    struct math_symbol { BOOST_SPIRIT_IS_TAG() };
+    struct currency_symbol { BOOST_SPIRIT_IS_TAG() };
+    struct modifier_symbol { BOOST_SPIRIT_IS_TAG() };
+    struct other_symbol { BOOST_SPIRIT_IS_TAG() };
 
 ///////////////////////////////////////////////////////////////////////////
 //  Unicode Derived Categories
 ///////////////////////////////////////////////////////////////////////////
-    struct alphabetic {};
-    struct uppercase {};
-    struct lowercase {};
-    struct white_space {};
-    struct hex_digit {};
-    struct noncharacter_code_point {};
-    struct default_ignorable_code_point {};
+    struct alphabetic { BOOST_SPIRIT_IS_TAG() };
+    struct uppercase { BOOST_SPIRIT_IS_TAG() };
+    struct lowercase { BOOST_SPIRIT_IS_TAG() };
+    struct white_space { BOOST_SPIRIT_IS_TAG() };
+    struct hex_digit { BOOST_SPIRIT_IS_TAG() };
+    struct noncharacter_code_point { BOOST_SPIRIT_IS_TAG() };
+    struct default_ignorable_code_point { BOOST_SPIRIT_IS_TAG() };
 
 ///////////////////////////////////////////////////////////////////////////
 //  Unicode Scripts
 ///////////////////////////////////////////////////////////////////////////
-    struct arabic {};
-    struct imperial_aramaic {};
-    struct armenian {};
-    struct avestan {};
-    struct balinese {};
-    struct bamum {};
-    struct bengali {};
-    struct bopomofo {};
-    struct braille {};
-    struct buginese {};
-    struct buhid {};
-    struct canadian_aboriginal {};
-    struct carian {};
-    struct cham {};
-    struct cherokee {};
-    struct coptic {};
-    struct cypriot {};
-    struct cyrillic {};
-    struct devanagari {};
-    struct deseret {};
-    struct egyptian_hieroglyphs {};
-    struct ethiopic {};
-    struct georgian {};
-    struct glagolitic {};
-    struct gothic {};
-    struct greek {};
-    struct gujarati {};
-    struct gurmukhi {};
-    struct hangul {};
-    struct han {};
-    struct hanunoo {};
-    struct hebrew {};
-    struct hiragana {};
-    struct katakana_or_hiragana {};
-    struct old_italic {};
-    struct javanese {};
-    struct kayah_li {};
-    struct katakana {};
-    struct kharoshthi {};
-    struct khmer {};
-    struct kannada {};
-    struct kaithi {};
-    struct tai_tham {};
-    struct lao {};
-    struct latin {};
-    struct lepcha {};
-    struct limbu {};
-    struct linear_b {};
-    struct lisu {};
-    struct lycian {};
-    struct lydian {};
-    struct malayalam {};
-    struct mongolian {};
-    struct meetei_mayek {};
-    struct myanmar {};
-    struct nko {};
-    struct ogham {};
-    struct ol_chiki {};
-    struct old_turkic {};
-    struct oriya {};
-    struct osmanya {};
-    struct phags_pa {};
-    struct inscriptional_pahlavi {};
-    struct phoenician {};
-    struct inscriptional_parthian {};
-    struct rejang {};
-    struct runic {};
-    struct samaritan {};
-    struct old_south_arabian {};
-    struct saurashtra {};
-    struct shavian {};
-    struct sinhala {};
-    struct sundanese {};
-    struct syloti_nagri {};
-    struct syriac {};
-    struct tagbanwa {};
-    struct tai_le {};
-    struct new_tai_lue {};
-    struct tamil {};
-    struct tai_viet {};
-    struct telugu {};
-    struct tifinagh {};
-    struct tagalog {};
-    struct thaana {};
-    struct thai {};
-    struct tibetan {};
-    struct ugaritic {};
-    struct vai {};
-    struct old_persian {};
-    struct cuneiform {};
-    struct yi {};
-    struct inherited {};
-    struct common {};
-    struct unknown {};
+    struct arabic { BOOST_SPIRIT_IS_TAG() };
+    struct imperial_aramaic { BOOST_SPIRIT_IS_TAG() };
+    struct armenian { BOOST_SPIRIT_IS_TAG() };
+    struct avestan { BOOST_SPIRIT_IS_TAG() };
+    struct balinese { BOOST_SPIRIT_IS_TAG() };
+    struct bamum { BOOST_SPIRIT_IS_TAG() };
+    struct bengali { BOOST_SPIRIT_IS_TAG() };
+    struct bopomofo { BOOST_SPIRIT_IS_TAG() };
+    struct braille { BOOST_SPIRIT_IS_TAG() };
+    struct buginese { BOOST_SPIRIT_IS_TAG() };
+    struct buhid { BOOST_SPIRIT_IS_TAG() };
+    struct canadian_aboriginal { BOOST_SPIRIT_IS_TAG() };
+    struct carian { BOOST_SPIRIT_IS_TAG() };
+    struct cham { BOOST_SPIRIT_IS_TAG() };
+    struct cherokee { BOOST_SPIRIT_IS_TAG() };
+    struct coptic { BOOST_SPIRIT_IS_TAG() };
+    struct cypriot { BOOST_SPIRIT_IS_TAG() };
+    struct cyrillic { BOOST_SPIRIT_IS_TAG() };
+    struct devanagari { BOOST_SPIRIT_IS_TAG() };
+    struct deseret { BOOST_SPIRIT_IS_TAG() };
+    struct egyptian_hieroglyphs { BOOST_SPIRIT_IS_TAG() };
+    struct ethiopic { BOOST_SPIRIT_IS_TAG() };
+    struct georgian { BOOST_SPIRIT_IS_TAG() };
+    struct glagolitic { BOOST_SPIRIT_IS_TAG() };
+    struct gothic { BOOST_SPIRIT_IS_TAG() };
+    struct greek { BOOST_SPIRIT_IS_TAG() };
+    struct gujarati { BOOST_SPIRIT_IS_TAG() };
+    struct gurmukhi { BOOST_SPIRIT_IS_TAG() };
+    struct hangul { BOOST_SPIRIT_IS_TAG() };
+    struct han { BOOST_SPIRIT_IS_TAG() };
+    struct hanunoo { BOOST_SPIRIT_IS_TAG() };
+    struct hebrew { BOOST_SPIRIT_IS_TAG() };
+    struct hiragana { BOOST_SPIRIT_IS_TAG() };
+    struct katakana_or_hiragana { BOOST_SPIRIT_IS_TAG() };
+    struct old_italic { BOOST_SPIRIT_IS_TAG() };
+    struct javanese { BOOST_SPIRIT_IS_TAG() };
+    struct kayah_li { BOOST_SPIRIT_IS_TAG() };
+    struct katakana { BOOST_SPIRIT_IS_TAG() };
+    struct kharoshthi { BOOST_SPIRIT_IS_TAG() };
+    struct khmer { BOOST_SPIRIT_IS_TAG() };
+    struct kannada { BOOST_SPIRIT_IS_TAG() };
+    struct kaithi { BOOST_SPIRIT_IS_TAG() };
+    struct tai_tham { BOOST_SPIRIT_IS_TAG() };
+    struct lao { BOOST_SPIRIT_IS_TAG() };
+    struct latin { BOOST_SPIRIT_IS_TAG() };
+    struct lepcha { BOOST_SPIRIT_IS_TAG() };
+    struct limbu { BOOST_SPIRIT_IS_TAG() };
+    struct linear_b { BOOST_SPIRIT_IS_TAG() };
+    struct lisu { BOOST_SPIRIT_IS_TAG() };
+    struct lycian { BOOST_SPIRIT_IS_TAG() };
+    struct lydian { BOOST_SPIRIT_IS_TAG() };
+    struct malayalam { BOOST_SPIRIT_IS_TAG() };
+    struct mongolian { BOOST_SPIRIT_IS_TAG() };
+    struct meetei_mayek { BOOST_SPIRIT_IS_TAG() };
+    struct myanmar { BOOST_SPIRIT_IS_TAG() };
+    struct nko { BOOST_SPIRIT_IS_TAG() };
+    struct ogham { BOOST_SPIRIT_IS_TAG() };
+    struct ol_chiki { BOOST_SPIRIT_IS_TAG() };
+    struct old_turkic { BOOST_SPIRIT_IS_TAG() };
+    struct oriya { BOOST_SPIRIT_IS_TAG() };
+    struct osmanya { BOOST_SPIRIT_IS_TAG() };
+    struct phags_pa { BOOST_SPIRIT_IS_TAG() };
+    struct inscriptional_pahlavi { BOOST_SPIRIT_IS_TAG() };
+    struct phoenician { BOOST_SPIRIT_IS_TAG() };
+    struct inscriptional_parthian { BOOST_SPIRIT_IS_TAG() };
+    struct rejang { BOOST_SPIRIT_IS_TAG() };
+    struct runic { BOOST_SPIRIT_IS_TAG() };
+    struct samaritan { BOOST_SPIRIT_IS_TAG() };
+    struct old_south_arabian { BOOST_SPIRIT_IS_TAG() };
+    struct saurashtra { BOOST_SPIRIT_IS_TAG() };
+    struct shavian { BOOST_SPIRIT_IS_TAG() };
+    struct sinhala { BOOST_SPIRIT_IS_TAG() };
+    struct sundanese { BOOST_SPIRIT_IS_TAG() };
+    struct syloti_nagri { BOOST_SPIRIT_IS_TAG() };
+    struct syriac { BOOST_SPIRIT_IS_TAG() };
+    struct tagbanwa { BOOST_SPIRIT_IS_TAG() };
+    struct tai_le { BOOST_SPIRIT_IS_TAG() };
+    struct new_tai_lue { BOOST_SPIRIT_IS_TAG() };
+    struct tamil { BOOST_SPIRIT_IS_TAG() };
+    struct tai_viet { BOOST_SPIRIT_IS_TAG() };
+    struct telugu { BOOST_SPIRIT_IS_TAG() };
+    struct tifinagh { BOOST_SPIRIT_IS_TAG() };
+    struct tagalog { BOOST_SPIRIT_IS_TAG() };
+    struct thaana { BOOST_SPIRIT_IS_TAG() };
+    struct thai { BOOST_SPIRIT_IS_TAG() };
+    struct tibetan { BOOST_SPIRIT_IS_TAG() };
+    struct ugaritic { BOOST_SPIRIT_IS_TAG() };
+    struct vai { BOOST_SPIRIT_IS_TAG() };
+    struct old_persian { BOOST_SPIRIT_IS_TAG() };
+    struct cuneiform { BOOST_SPIRIT_IS_TAG() };
+    struct yi { BOOST_SPIRIT_IS_TAG() };
+    struct inherited { BOOST_SPIRIT_IS_TAG() };
+    struct common { BOOST_SPIRIT_IS_TAG() };
+    struct unknown { BOOST_SPIRIT_IS_TAG() };
 #endif
 
     ///////////////////////////////////////////////////////////////////////////
@@ -269,11 +270,10 @@
     struct char_code
         : char_code_base<CharClass>, char_encoding_base<CharEncoding>
     {
-        typedef void is_spirit_tag;
+        BOOST_SPIRIT_IS_TAG()
         typedef CharEncoding char_encoding; // e.g. ascii
         typedef CharClass char_class;       // e.g. tag::alnum
     };
-
 }}}
 
 namespace boost { namespace spirit { namespace char_class
Added: trunk/boost/spirit/home/support/detail/is_spirit_tag.hpp
==============================================================================
--- (empty file)
+++ trunk/boost/spirit/home/support/detail/is_spirit_tag.hpp	2011-03-28 20:11:41 EDT (Mon, 28 Mar 2011)
@@ -0,0 +1,20 @@
+/*=============================================================================
+    Copyright (c) 2001-2011 Hartmut Kaiser
+
+    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)
+==============================================================================*/
+#if !defined(BOOST_SPIRIT_SUPPORT_DETAIL_IS_SPIRIT_TAG_MAR_28_2011_0341PM)
+#define BOOST_SPIRIT_SUPPORT_DETAIL_IS_SPIRIT_TAG_MAR_28_2011_0341PM
+
+#if defined(_MSC_VER)
+#pragma once
+#endif
+
+#ifndef BOOST_SPIRIT_USE_SPIRIT_V3
+#define BOOST_SPIRIT_IS_TAG()
+#else
+#define BOOST_SPIRIT_IS_TAG() typedef void is_spirit_tag;
+#endif
+
+#endif
Modified: trunk/boost/spirit/home/support/lazy.hpp
==============================================================================
--- trunk/boost/spirit/home/support/lazy.hpp	(original)
+++ trunk/boost/spirit/home/support/lazy.hpp	2011-03-28 20:11:41 EDT (Mon, 28 Mar 2011)
@@ -14,6 +14,7 @@
 #include <boost/spirit/include/phoenix_core.hpp>
 #include <boost/proto/proto.hpp>
 #include <boost/spirit/home/support/modify.hpp>
+#include <boost/spirit/home/support/detail/is_spirit_tag.hpp>
 
 namespace boost { namespace spirit
 {
@@ -26,7 +27,10 @@
 
     namespace tag
     {
-        struct lazy_eval {};
+        struct lazy_eval 
+        {
+            BOOST_SPIRIT_IS_TAG()
+        };
     }
 
     template <typename Domain>
Modified: trunk/boost/spirit/home/support/terminal.hpp
==============================================================================
--- trunk/boost/spirit/home/support/terminal.hpp	(original)
+++ trunk/boost/spirit/home/support/terminal.hpp	2011-03-28 20:11:41 EDT (Mon, 28 Mar 2011)
@@ -20,6 +20,7 @@
 #include <boost/spirit/home/support/meta_compiler.hpp>
 #include <boost/spirit/home/support/detail/make_vector.hpp>
 #include <boost/spirit/home/support/unused.hpp>
+#include <boost/spirit/home/support/detail/is_spirit_tag.hpp>
 #include <boost/preprocessor/tuple/elem.hpp>
 
 #include <boost/spirit/home/support/terminal_expression.hpp>
@@ -487,7 +488,7 @@
           , typename DataTag1 = unused_type, typename DataTag2 = unused_type>
         struct stateful_tag
         {
-            typedef void is_spirit_tag;
+            BOOST_SPIRIT_IS_TAG()
 
             typedef Data data_type;
 
@@ -573,7 +574,7 @@
 #ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
 
 #define BOOST_SPIRIT_TERMINAL_NAME(name, type_name)                             \
-    namespace tag { struct name { typedef void is_spirit_tag; }; }              \
+    namespace tag { struct name { BOOST_SPIRIT_IS_TAG() }; }                    \
     typedef boost::proto::terminal<tag::name>::type type_name;                  \
     type_name const name = {{}};                                                \
     inline void BOOST_PP_CAT(silence_unused_warnings_, name)() { (void) name; } \
@@ -582,7 +583,7 @@
 #else
 
 #define BOOST_SPIRIT_TERMINAL_NAME(name, type_name)                             \
-    namespace tag { struct name { typedef void is_spirit_tag; }; }              \
+    namespace tag { struct name { BOOST_SPIRIT_IS_TAG() }; }                    \
     typedef boost::proto::terminal<tag::name>::type type_name;                  \
     /***/
 
@@ -611,7 +612,7 @@
 #ifndef BOOST_SPIRIT_NO_PREDEFINED_TERMINALS
 
 #define BOOST_SPIRIT_TERMINAL_NAME_EX(name, type_name)                          \
-    namespace tag { struct name { typedef void is_spirit_tag; }; }              \
+    namespace tag { struct name { BOOST_SPIRIT_IS_TAG() }; }                    \
     typedef boost::spirit::terminal<tag::name> type_name;                       \
     type_name const name = type_name();                                         \
     inline void BOOST_PP_CAT(silence_unused_warnings_, name)() { (void) name; } \
@@ -620,7 +621,7 @@
 #else
 
 #define BOOST_SPIRIT_TERMINAL_NAME_EX(name, type_name)                          \
-    namespace tag { struct name { typedef void is_spirit_tag; }; }              \
+    namespace tag { struct name { BOOST_SPIRIT_IS_TAG() }; }                    \
     typedef boost::spirit::terminal<tag::name> type_name;                       \
     /***/
 
Modified: trunk/boost/spirit/include/phoenix_container.hpp
==============================================================================
--- trunk/boost/spirit/include/phoenix_container.hpp	(original)
+++ trunk/boost/spirit/include/phoenix_container.hpp	2011-03-28 20:11:41 EDT (Mon, 28 Mar 2011)
@@ -12,7 +12,7 @@
 #ifndef BOOST_SPIRIT_USE_PHOENIX_V3
 #include <boost/spirit/home/phoenix/container.hpp>
 #else
-#include <boost/phoenix/container.hpp>
+#include <boost/phoenix/stl/container.hpp>
 #endif
 
 #endif
Modified: trunk/libs/spirit/test/Jamfile
==============================================================================
--- trunk/libs/spirit/test/Jamfile	(original)
+++ trunk/libs/spirit/test/Jamfile	2011-03-28 20:11:41 EDT (Mon, 28 Mar 2011)
@@ -24,6 +24,7 @@
     :   <define>BOOST_SPIRIT_USE_PHOENIX_V3=1
         <define>BOOST_PROTO_MAX_ARITY=11
         <define>BOOST_PROTO_MAX_LOGICAL_ARITY=11
+        <define>BOOST_MPL_LIMIT_METAFUNCTION_ARITY=12
     ;
 
 ###############################################################################
@@ -36,7 +37,7 @@
     :
     ;
 
-# use this alias to buil Spirit against Phoenix V2
+# use this alias to build Spirit against Phoenix V2
 alias test_using_phoenix_v2 
     :   spirit_v2/qi 
         spirit_v2/qi_regressions
@@ -48,7 +49,7 @@
         spirit_v2/support_regressions
     ;
 
-# use this alias to buil Spirit against Phoenix V3
+# use this alias to build Spirit against Phoenix V3
 alias test_using_phoenix_v3 
     :   spirit_v2/qi 
         spirit_v2/qi_regressions
Modified: trunk/libs/spirit/test/lex/regression_file_iterator3.cpp
==============================================================================
--- trunk/libs/spirit/test/lex/regression_file_iterator3.cpp	(original)
+++ trunk/libs/spirit/test/lex/regression_file_iterator3.cpp	2011-03-28 20:11:41 EDT (Mon, 28 Mar 2011)
@@ -60,7 +60,7 @@
     {
         lex::token_def<> string_lookahead('\'');
         self("LA") = string_lookahead;
-            
+
         // make sure lookahead is implicitly evaluated using the lexer state
         // the token_def has been associated with
         self = st [
@@ -78,14 +78,14 @@
 {
     std::stringstream ss;
     ss << "'foo''bar'";
-    
+
     file_iterator begin = make_file_iterator(ss, "SS");
     file_iterator end;
-    
+
     lexer l;
     token_iterator begin2 = l.begin(begin, end);
     token_iterator end2 = l.end();
-    
+
     char const* test_data[] = { "1,'foo'", "1,'foo''bar'" };
     std::size_t const test_data_size = sizeof(test_data)/sizeof(test_data[0]);
 
Modified: trunk/libs/spirit/test/qi/regression_numeric_alternatives.cpp
==============================================================================
--- trunk/libs/spirit/test/qi/regression_numeric_alternatives.cpp	(original)
+++ trunk/libs/spirit/test/qi/regression_numeric_alternatives.cpp	2011-03-28 20:11:41 EDT (Mon, 28 Mar 2011)
@@ -3,11 +3,14 @@
 //  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 "test.hpp"
 #include <boost/detail/lightweight_test.hpp>
 #include <boost/spirit/include/qi.hpp>
+#include <boost/spirit/include/phoenix.hpp>
+
+#include "test.hpp"
 
-int main() {
+int main() 
+{
     using spirit_test::test;
     using boost::spirit::qi::rule;
     using boost::spirit::qi::parse;
Modified: trunk/libs/spirit/test/qi/terminal_ex.cpp
==============================================================================
--- trunk/libs/spirit/test/qi/terminal_ex.cpp	(original)
+++ trunk/libs/spirit/test/qi/terminal_ex.cpp	2011-03-28 20:11:41 EDT (Mon, 28 Mar 2011)
@@ -316,10 +316,6 @@
     using spirit_test::test_attr;
     using spirit_test::test;
 
-    using boost::phoenix::val;
-    using boost::phoenix::actor;
-    using boost::phoenix::value;
-
     using testns::ops;
     using testns::check_type_1;
     using testns::check_type_2;
@@ -345,6 +341,12 @@
         BOOST_TEST(test_attr("++---****/", IP4 >> '/', c) && c == 9);
     }
 
+#ifndef BOOST_SPIRIT_USE_PHOENIX_V3
+
+    using boost::phoenix::val;
+    using boost::phoenix::actor;
+    using boost::phoenix::value;
+
     { // all lazy args
         int c = 0;
 #define LP1 ops(val(1))
@@ -393,6 +395,61 @@
         BOOST_TEST(test_attr("++--**/", MP5 >> '/', c) && c == 6);
     }
 
+#else // BOOST_SPIRIT_USE_PHOENIX_V3
+
+    using boost::phoenix::val;
+    using boost::phoenix::actor;
+    using boost::phoenix::expression::value;
+
+    { // all lazy args
+        int c = 0;
+#define LP1 ops(val(1))
+        check_type_1<value<int>::type>(LP1);
+        BOOST_TEST(test_attr("+/", LP1 >> '/', c) && c == 1);
+
+        c = 0;
+#define LP2 ops(val(1), val(4))
+        check_type_2<value<int>::type, value<int>::type>(LP2);
+        BOOST_TEST(test_attr("+----/", LP2 >> '/', c) && c == 5);
+
+        c = 0;
+#define LP3 ops(val((char)2), val(3.), val(4))
+        check_type_3<value<char>::type, value<double>::type, value<int>::type>(LP3);
+        BOOST_TEST(!test("++---***/", LP3 >> '/'));
+#define LP4 ops(val(1), val(2), val(3))
+        check_type_3<value<int>::type, value<int>::type, value<int>::type>(LP4);
+        BOOST_TEST(test_attr("+--***/", LP4 >> '/', c) && c == 6);
+    }
+
+    { // mixed immediate and lazy args
+        namespace fusion = boost::fusion;
+        namespace phx = boost::phoenix;
+
+        int c = 0;
+#define MP1 ops(val(3), 2)
+        check_type_2<value<int>::type, int>(MP1);
+        BOOST_TEST(test_attr("+++--/", MP1 >> '/', c) && c == 5);
+
+        c = 0;
+#define MP2 ops(4, val(1))
+        check_type_2<int, value<int>::type>(MP2);
+        BOOST_TEST(test_attr("++++-/", MP2 >> '/', c) && c == 5);
+
+        c = 0;
+#define MP3 ops(2, val(2), val(2))
+        check_type_3<int, value<int>::type, value<int>::type>(MP3);
+        BOOST_TEST(!test("++-**/", MP3 >> '/'));
+#define MP4 ops(2, val(2), 2)
+        check_type_3<int, value<int>::type, int>(MP4);
+        BOOST_TEST(test_attr("++--**/", MP4 >> '/', c) && c == 6);
+
+        c = 0;
+#define MP5 ops(val(5) - val(3), 2, val(2))
+        check_type_3<phx::expression::minus<value<int>::type, value<int>::type>::type, int, value<int>::type>(MP5);
+        BOOST_TEST(test_attr("++--**/", MP5 >> '/', c) && c == 6);
+    }
+#endif
+
     return boost::report_errors();
 }