$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r63798 - in branches/release: . boost boost/algorithm/string boost/archive boost/bimap boost/config boost/detail boost/filesystem boost/functional/hash boost/fusion boost/gil boost/graph boost/integer boost/interprocess boost/intrusive boost/io boost/iostreams boost/math boost/msm boost/numeric/ublas boost/program_options boost/property_tree boost/python boost/range boost/regex boost/serialization boost/signals boost/signals2 boost/spirit boost/spirit/home boost/spirit/home/karma boost/spirit/home/karma/binary boost/spirit/home/karma/operator boost/spirit/home/lex/lexer/lexertl boost/spirit/home/qi/nonterminal boost/spirit/home/support boost/spirit/include boost/statechart boost/system boost/thread boost/tr1 boost/type_traits boost/unordered boost/utility boost/uuid boost/variant boost/wave doc libs libs/array/doc libs/array/test libs/bimap libs/config libs/config/test libs/filesystem libs/functional/hash libs/fusion libs/graph_parallel libs/integer libs/interprocess libs/intrusive libs/iostreams libs/math libs/mpl/doc/refmanual libs/mpl/doc/src/refmanual libs/msm libs/numeric/ublas libs/numeric/ublas/doc libs/program_options libs/property_tree libs/python libs/python/doc/v2 libs/range libs/range/doc libs/regex libs/serialization libs/serialization/test libs/signals libs/signals2 libs/spirit libs/spirit/classic/example libs/spirit/doc libs/spirit/doc/karma libs/spirit/doc/lex libs/spirit/example libs/spirit/example/karma libs/spirit/example/lex libs/spirit/example/qi libs/spirit/example/qi/calc6 libs/spirit/example/qi/calc7 libs/spirit/example/qi/mini_c libs/spirit/example/scheme/example/scheme libs/spirit/example/scheme/example/sexpr libs/spirit/example/scheme/input libs/spirit/example/scheme/output libs/spirit/example/scheme/qi libs/spirit/example/scheme/test/qi libs/spirit/phoenix libs/spirit/test libs/spirit/test/qi libs/statechart libs/static_assert libs/system libs/thread libs/timer libs/tr1 libs/type_traits libs/unordered libs/utility libs/utility/swap/test libs/uuid libs/wave more more/getting_started status tools tools/bcp tools/boostbook tools/build/v2 tools/build/v2/tools tools/inspect tools/jam tools/quickbook tools/regression tools/release tools/wave
From: hartmut.kaiser_at_[hidden]
Date: 2010-07-09 17:47:00
Author: hkaiser
Date: 2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
New Revision: 63798
URL: http://svn.boost.org/trac/boost/changeset/63798
Log:
Spirit: merging from trunk
Added:
   branches/release/boost/spirit/include/support_attributes_fwd.hpp
      - copied unchanged from r63681, /trunk/boost/spirit/include/support_attributes_fwd.hpp
   branches/release/libs/spirit/example/Jamfile
      - copied unchanged from r63693, /trunk/libs/spirit/example/Jamfile
Properties modified: 
   branches/release/   (props changed)
   branches/release/INSTALL   (props changed)
   branches/release/Jamroot   (props changed)
   branches/release/LICENSE_1_0.txt   (props changed)
   branches/release/boost/   (props changed)
   branches/release/boost-build.jam   (props changed)
   branches/release/boost.css   (props changed)
   branches/release/boost.png   (props changed)
   branches/release/boost/algorithm/string/   (props changed)
   branches/release/boost/archive/   (props changed)
   branches/release/boost/array.hpp   (props changed)
   branches/release/boost/bimap/   (props changed)
   branches/release/boost/config/   (props changed)
   branches/release/boost/config.hpp   (props changed)
   branches/release/boost/detail/   (props changed)
   branches/release/boost/detail/endian.hpp   (props changed)
   branches/release/boost/filesystem/   (props changed)
   branches/release/boost/filesystem.hpp   (props changed)
   branches/release/boost/functional/hash/   (props changed)
   branches/release/boost/fusion/   (props changed)
   branches/release/boost/gil/   (props changed)
   branches/release/boost/graph/   (props changed)
   branches/release/boost/integer/   (props changed)
   branches/release/boost/interprocess/   (props changed)
   branches/release/boost/intrusive/   (props changed)
   branches/release/boost/io/   (props changed)
   branches/release/boost/iostreams/   (props changed)
   branches/release/boost/math/   (props changed)
   branches/release/boost/math_fwd.hpp   (props changed)
   branches/release/boost/msm/   (props changed)
   branches/release/boost/numeric/ublas/   (props changed)
   branches/release/boost/numeric/ublas/functional.hpp   (props changed)
   branches/release/boost/program_options/   (props changed)
   branches/release/boost/property_tree/   (props changed)
   branches/release/boost/python/   (props changed)
   branches/release/boost/range/   (props changed)
   branches/release/boost/regex/   (props changed)
   branches/release/boost/serialization/   (props changed)
   branches/release/boost/signals/   (props changed)
   branches/release/boost/signals2/   (props changed)
   branches/release/boost/spirit/   (props changed)
   branches/release/boost/spirit/home/   (props changed)
   branches/release/boost/spirit/home/karma/   (props changed)
   branches/release/boost/spirit/home/support/attributes.hpp   (contents, props changed)
   branches/release/boost/statechart/   (props changed)
   branches/release/boost/system/   (props changed)
   branches/release/boost/thread/   (props changed)
   branches/release/boost/thread.hpp   (props changed)
   branches/release/boost/tr1/   (props changed)
   branches/release/boost/type_traits/   (props changed)
   branches/release/boost/unordered/   (props changed)
   branches/release/boost/utility/   (props changed)
   branches/release/boost/utility/value_init.hpp   (props changed)
   branches/release/boost/uuid/   (props changed)
   branches/release/boost/variant/   (props changed)
   branches/release/boost/version.hpp   (props changed)
   branches/release/boost/wave/   (props changed)
   branches/release/bootstrap.bat   (props changed)
   branches/release/bootstrap.sh   (props changed)
   branches/release/doc/   (props changed)
   branches/release/index.htm   (props changed)
   branches/release/index.html   (props changed)
   branches/release/libs/   (props changed)
   branches/release/libs/array/doc/array.xml   (props changed)
   branches/release/libs/array/test/array0.cpp   (props changed)
   branches/release/libs/array/test/array2.cpp   (props changed)
   branches/release/libs/bimap/   (props changed)
   branches/release/libs/config/   (props changed)
   branches/release/libs/config/test/boost_no_com_value_init.ipp   (props changed)
   branches/release/libs/filesystem/   (props changed)
   branches/release/libs/functional/hash/   (props changed)
   branches/release/libs/fusion/   (props changed)
   branches/release/libs/graph_parallel/   (props changed)
   branches/release/libs/integer/   (props changed)
   branches/release/libs/interprocess/   (props changed)
   branches/release/libs/intrusive/   (props changed)
   branches/release/libs/iostreams/   (props changed)
   branches/release/libs/libraries.htm   (props changed)
   branches/release/libs/maintainers.txt   (props changed)
   branches/release/libs/math/   (props changed)
   branches/release/libs/mpl/doc/refmanual/broken-compiler-workarounds.html   (props changed)
   branches/release/libs/mpl/doc/refmanual/categorized-index-concepts.html   (props changed)
   branches/release/libs/mpl/doc/refmanual/cfg-no-preprocessed-headers.html   (props changed)
   branches/release/libs/mpl/doc/refmanual/composition-and-argument-binding.html   (props changed)
   branches/release/libs/mpl/doc/refmanual/data-types-concepts.html   (props changed)
   branches/release/libs/mpl/doc/refmanual/data-types-miscellaneous.html   (props changed)
   branches/release/libs/mpl/doc/refmanual/extensible-associative-sequence.html   (props changed)
   branches/release/libs/mpl/doc/refmanual/inserter-class.html   (props changed)
   branches/release/libs/mpl/doc/refmanual/tag-dispatched-metafunction.html   (props changed)
   branches/release/libs/mpl/doc/refmanual/trivial-metafunctions-summary.html   (props changed)
   branches/release/libs/mpl/doc/src/refmanual/Iterators-Iterator.rst   (props changed)
   branches/release/libs/msm/   (props changed)
   branches/release/libs/numeric/ublas/   (props changed)
   branches/release/libs/numeric/ublas/doc/   (props changed)
   branches/release/libs/program_options/   (props changed)
   branches/release/libs/property_tree/   (props changed)
   branches/release/libs/python/   (props changed)
   branches/release/libs/python/doc/v2/args.html   (props changed)
   branches/release/libs/python/doc/v2/return_internal_reference.html   (props changed)
   branches/release/libs/range/   (props changed)
   branches/release/libs/range/doc/   (props changed)
   branches/release/libs/regex/   (props changed)
   branches/release/libs/serialization/   (props changed)
   branches/release/libs/serialization/test/   (props changed)
   branches/release/libs/serialization/test/A.cpp   (props changed)
   branches/release/libs/serialization/test/A.hpp   (props changed)
   branches/release/libs/serialization/test/A.ipp   (props changed)
   branches/release/libs/serialization/test/B.hpp   (props changed)
   branches/release/libs/serialization/test/C.hpp   (props changed)
   branches/release/libs/serialization/test/D.hpp   (props changed)
   branches/release/libs/serialization/test/J.hpp   (props changed)
   branches/release/libs/serialization/test/Jamfile.v2   (props changed)
   branches/release/libs/serialization/test/base.hpp   (props changed)
   branches/release/libs/serialization/test/binary_archive.hpp   (props changed)
   branches/release/libs/serialization/test/binary_warchive.hpp   (props changed)
   branches/release/libs/serialization/test/derived2.hpp   (props changed)
   branches/release/libs/serialization/test/dll_a.cpp   (props changed)
   branches/release/libs/serialization/test/dll_base.cpp   (props changed)
   branches/release/libs/serialization/test/dll_derived2.cpp   (props changed)
   branches/release/libs/serialization/test/polymorphic_array_binary_archive.hpp   (props changed)
   branches/release/libs/serialization/test/polymorphic_base.cpp   (props changed)
   branches/release/libs/serialization/test/polymorphic_base.hpp   (props changed)
   branches/release/libs/serialization/test/polymorphic_binary_archive.hpp   (props changed)
   branches/release/libs/serialization/test/polymorphic_derived1.cpp   (props changed)
   branches/release/libs/serialization/test/polymorphic_derived1.hpp   (props changed)
   branches/release/libs/serialization/test/polymorphic_derived2.cpp   (props changed)
   branches/release/libs/serialization/test/polymorphic_derived2.hpp   (props changed)
   branches/release/libs/serialization/test/polymorphic_text_archive.hpp   (props changed)
   branches/release/libs/serialization/test/polymorphic_text_warchive.hpp   (props changed)
   branches/release/libs/serialization/test/polymorphic_xml_archive.hpp   (props changed)
   branches/release/libs/serialization/test/polymorphic_xml_warchive.hpp   (props changed)
   branches/release/libs/serialization/test/portable_binary_archive.hpp   (props changed)
   branches/release/libs/serialization/test/test_array.cpp   (props changed)
   branches/release/libs/serialization/test/test_binary.cpp   (props changed)
   branches/release/libs/serialization/test/test_bitset.cpp   (props changed)
   branches/release/libs/serialization/test/test_check.cpp   (props changed)
   branches/release/libs/serialization/test/test_class_info_load.cpp   (props changed)
   branches/release/libs/serialization/test/test_class_info_save.cpp   (props changed)
   branches/release/libs/serialization/test/test_codecvt_null.cpp   (props changed)
   branches/release/libs/serialization/test/test_complex.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_load_fail1.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_load_fail1_nvp.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_load_fail2.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_load_fail2_nvp.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_load_fail3.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_load_fail3_nvp.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_pass.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_save_warn1.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_save_warn1_nvp.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_save_warn2.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_save_warn2_nvp.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_save_warn3.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_save_warn3_nvp.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_save_warn4.cpp   (props changed)
   branches/release/libs/serialization/test/test_const_save_warn4_nvp.cpp   (props changed)
   branches/release/libs/serialization/test/test_contained_class.cpp   (props changed)
   branches/release/libs/serialization/test/test_cyclic_ptrs.cpp   (props changed)
   branches/release/libs/serialization/test/test_decl.hpp   (props changed)
   branches/release/libs/serialization/test/test_delete_pointer.cpp   (props changed)
   branches/release/libs/serialization/test/test_deque.cpp   (props changed)
   branches/release/libs/serialization/test/test_derived.cpp   (props changed)
   branches/release/libs/serialization/test/test_derived_class.cpp   (props changed)
   branches/release/libs/serialization/test/test_derived_class_ptr.cpp   (props changed)
   branches/release/libs/serialization/test/test_diamond.cpp   (props changed)
   branches/release/libs/serialization/test/test_dll_exported.cpp   (props changed)
   branches/release/libs/serialization/test/test_dll_plugin.cpp   (props changed)
   branches/release/libs/serialization/test/test_dll_simple.cpp   (props changed)
   branches/release/libs/serialization/test/test_exported.cpp   (props changed)
   branches/release/libs/serialization/test/test_inclusion.cpp   (props changed)
   branches/release/libs/serialization/test/test_iterators.cpp   (props changed)
   branches/release/libs/serialization/test/test_iterators_base64.cpp   (props changed)
   branches/release/libs/serialization/test/test_list.cpp   (props changed)
   branches/release/libs/serialization/test/test_list_ptrs.cpp   (props changed)
   branches/release/libs/serialization/test/test_map.cpp   (props changed)
   branches/release/libs/serialization/test/test_mi.cpp   (props changed)
   branches/release/libs/serialization/test/test_mult_archive_types.cpp   (props changed)
   branches/release/libs/serialization/test/test_multiple_inheritance.cpp   (props changed)
   branches/release/libs/serialization/test/test_multiple_ptrs.cpp   (props changed)
   branches/release/libs/serialization/test/test_new_operator.cpp   (props changed)
   branches/release/libs/serialization/test/test_no_rtti.cpp   (props changed)
   branches/release/libs/serialization/test/test_non_default_ctor.cpp   (props changed)
   branches/release/libs/serialization/test/test_non_default_ctor2.cpp   (props changed)
   branches/release/libs/serialization/test/test_non_intrusive.cpp   (props changed)
   branches/release/libs/serialization/test/test_not_serializable.cpp   (props changed)
   branches/release/libs/serialization/test/test_null_ptr.cpp   (props changed)
   branches/release/libs/serialization/test/test_nvp.cpp   (props changed)
   branches/release/libs/serialization/test/test_object.cpp   (props changed)
   branches/release/libs/serialization/test/test_optional.cpp   (props changed)
   branches/release/libs/serialization/test/test_pimpl.cpp   (props changed)
   branches/release/libs/serialization/test/test_polymorphic.cpp   (props changed)
   branches/release/libs/serialization/test/test_polymorphic2.cpp   (props changed)
   branches/release/libs/serialization/test/test_polymorphic2.hpp   (props changed)
   branches/release/libs/serialization/test/test_polymorphic2imp.cpp   (props changed)
   branches/release/libs/serialization/test/test_polymorphic_A.cpp   (props changed)
   branches/release/libs/serialization/test/test_polymorphic_A.hpp   (props changed)
   branches/release/libs/serialization/test/test_primitive.cpp   (props changed)
   branches/release/libs/serialization/test/test_private_base.cpp   (props changed)
   branches/release/libs/serialization/test/test_private_ctor.cpp   (props changed)
   branches/release/libs/serialization/test/test_recursion.cpp   (props changed)
   branches/release/libs/serialization/test/test_registered.cpp   (props changed)
   branches/release/libs/serialization/test/test_reset_object_address.cpp   (props changed)
   branches/release/libs/serialization/test/test_set.cpp   (props changed)
   branches/release/libs/serialization/test/test_shared_ptr.cpp   (props changed)
   branches/release/libs/serialization/test/test_shared_ptr_132.cpp   (props changed)
   branches/release/libs/serialization/test/test_shared_ptr_multi_base.cpp   (props changed)
   branches/release/libs/serialization/test/test_simple_class.cpp   (props changed)
   branches/release/libs/serialization/test/test_simple_class_ptr.cpp   (props changed)
   branches/release/libs/serialization/test/test_singleton.cpp   (props changed)
   branches/release/libs/serialization/test/test_smart_cast.cpp   (props changed)
   branches/release/libs/serialization/test/test_split.cpp   (props changed)
   branches/release/libs/serialization/test/test_static_warning.cpp   (props changed)
   branches/release/libs/serialization/test/test_tools.hpp   (props changed)
   branches/release/libs/serialization/test/test_tracking.cpp   (props changed)
   branches/release/libs/serialization/test/test_traits_fail.cpp   (props changed)
   branches/release/libs/serialization/test/test_traits_pass.cpp   (props changed)
   branches/release/libs/serialization/test/test_unregistered.cpp   (props changed)
   branches/release/libs/serialization/test/test_utf8_codecvt.cpp   (props changed)
   branches/release/libs/serialization/test/test_valarray.cpp   (props changed)
   branches/release/libs/serialization/test/test_variant.cpp   (props changed)
   branches/release/libs/serialization/test/test_vector.cpp   (props changed)
   branches/release/libs/serialization/test/test_void_cast.cpp   (props changed)
   branches/release/libs/serialization/test/text_archive.hpp   (props changed)
   branches/release/libs/serialization/test/text_warchive.hpp   (props changed)
   branches/release/libs/serialization/test/xml_archive.hpp   (props changed)
   branches/release/libs/serialization/test/xml_warchive.hpp   (props changed)
   branches/release/libs/signals/   (props changed)
   branches/release/libs/signals2/   (props changed)
   branches/release/libs/spirit/   (props changed)
   branches/release/libs/spirit/classic/example/   (props changed)
   branches/release/libs/spirit/doc/   (props changed)
   branches/release/libs/spirit/example/   (props changed)
   branches/release/libs/spirit/phoenix/   (props changed)
   branches/release/libs/spirit/test/   (props changed)
   branches/release/libs/spirit/test/qi/optional.cpp   (props changed)
   branches/release/libs/statechart/   (props changed)
   branches/release/libs/static_assert/   (props changed)
   branches/release/libs/system/   (props changed)
   branches/release/libs/thread/   (props changed)
   branches/release/libs/timer/   (props changed)
   branches/release/libs/tr1/   (props changed)
   branches/release/libs/type_traits/   (props changed)
   branches/release/libs/unordered/   (props changed)
   branches/release/libs/utility/   (props changed)
   branches/release/libs/utility/swap.html   (props changed)
   branches/release/libs/utility/swap/test/std_bitset.cpp   (props changed)
   branches/release/libs/utility/value_init.htm   (props changed)
   branches/release/libs/utility/value_init_test.cpp   (props changed)
   branches/release/libs/uuid/   (props changed)
   branches/release/libs/wave/   (props changed)
   branches/release/more/   (props changed)
   branches/release/more/getting_started/   (props changed)
   branches/release/rst.css   (props changed)
   branches/release/status/   (props changed)
   branches/release/status/Jamfile.v2   (props changed)
   branches/release/tools/   (props changed)
   branches/release/tools/bcp/   (props changed)
   branches/release/tools/boostbook/   (props changed)
   branches/release/tools/build/v2/   (props changed)
   branches/release/tools/build/v2/tools/   (props changed)
   branches/release/tools/inspect/   (props changed)
   branches/release/tools/jam/   (props changed)
   branches/release/tools/quickbook/   (props changed)
   branches/release/tools/regression/   (props changed)
   branches/release/tools/release/   (props changed)
   branches/release/tools/wave/   (props changed)
Text files modified: 
   branches/release/boost/spirit/home/karma/binary/padding.hpp                    |     2                                         
   branches/release/boost/spirit/home/karma/operator/sequence.hpp                 |     7 +                                       
   branches/release/boost/spirit/home/lex/lexer/lexertl/token.hpp                 |    17 ++++                                    
   branches/release/boost/spirit/home/qi/nonterminal/simple_trace.hpp             |    53 --------------                          
   branches/release/boost/spirit/home/support/attributes.hpp                      |   140 +++++++++++++++++++++++++++++---------- 
   branches/release/boost/spirit/home/support/attributes_fwd.hpp                  |    28 ++++++++                                
   branches/release/boost/spirit/home/support/meta_compiler.hpp                   |     4                                         
   branches/release/boost/spirit/include/version.hpp                              |     2                                         
   branches/release/libs/spirit/doc/karma/directive.qbk                           |     2                                         
   branches/release/libs/spirit/doc/lex/quick_reference.qbk                       |     2                                         
   branches/release/libs/spirit/doc/what_s_new.qbk                                |    17 ++++                                    
   branches/release/libs/spirit/example/karma/Jamfile                             |     6 +                                       
   branches/release/libs/spirit/example/karma/calc2_ast.hpp                       |    23 ++++--                                  
   branches/release/libs/spirit/example/karma/calc2_ast_vm.hpp                    |    23 ++++-                                   
   branches/release/libs/spirit/example/karma/complex_number_easier.cpp           |     2                                         
   branches/release/libs/spirit/example/karma/num_list3.cpp                       |     4                                         
   branches/release/libs/spirit/example/karma/simple_columns_directive.hpp        |     2                                         
   branches/release/libs/spirit/example/lex/Jamfile                               |     8 ++                                      
   branches/release/libs/spirit/example/qi/Jamfile                                |     4                                         
   branches/release/libs/spirit/example/qi/adapt_template_struct.cpp              |     2                                         
   branches/release/libs/spirit/example/qi/boost_array.cpp                        |    19 ++--                                    
   branches/release/libs/spirit/example/qi/calc6/calc6c.hpp                       |     9 +                                       
   branches/release/libs/spirit/example/qi/calc7/calc7c.hpp                       |     7 +                                       
   branches/release/libs/spirit/example/qi/mini_c/mini_cc.hpp                     |    10 +-                                      
   branches/release/libs/spirit/example/qi/parse_date.cpp                         |     2                                         
   branches/release/libs/spirit/example/scheme/example/scheme/factorial1.cpp      |     8 +                                       
   branches/release/libs/spirit/example/scheme/example/sexpr/sexpr_error_test.cpp |     2                                         
   branches/release/libs/spirit/example/scheme/input/sexpr.hpp                    |     2                                         
   branches/release/libs/spirit/example/scheme/output/sexpr.hpp                   |     2                                         
   branches/release/libs/spirit/example/scheme/qi/qiexpr_generator.hpp            |     2                                         
   branches/release/libs/spirit/example/scheme/test/qi/qi_interpreter.cpp         |     6                                         
   branches/release/libs/spirit/test/qi/symbols.cpp                               |    26 +++---                                  
   32 files changed, 285 insertions(+), 158 deletions(-)
Modified: branches/release/boost/spirit/home/karma/binary/padding.hpp
==============================================================================
--- branches/release/boost/spirit/home/karma/binary/padding.hpp	(original)
+++ branches/release/boost/spirit/home/karma/binary/padding.hpp	2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -75,7 +75,7 @@
 
             bool result = true;
             while (result && count-- != 0)
-                result = detail::generate_to(sink, 0);
+                result = detail::generate_to(sink, '\0');
 
             if (result)
                 result = karma::delimit_out(sink, d);  // always do post-delimiting
Modified: branches/release/boost/spirit/home/karma/operator/sequence.hpp
==============================================================================
--- branches/release/boost/spirit/home/karma/operator/sequence.hpp	(original)
+++ branches/release/boost/spirit/home/karma/operator/sequence.hpp	2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -29,6 +29,8 @@
 #include <boost/type_traits/is_same.hpp>
 #include <boost/mpl/bitor.hpp>
 #include <boost/mpl/int.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
 #include <boost/fusion/include/transform.hpp>
 #include <boost/mpl/accumulate.hpp>
 
@@ -98,7 +100,10 @@
 
         template <typename Attribute>
         inline typename enable_if<
-            fusion::traits::is_sequence<Attribute>, std::size_t
+            mpl::and_<
+                fusion::traits::is_sequence<Attribute>
+              , mpl::not_<traits::is_container<Attribute> > >
+          , std::size_t
         >::type
         attr_size(Attribute const& attr)
         {
Modified: branches/release/boost/spirit/home/lex/lexer/lexertl/token.hpp
==============================================================================
--- branches/release/boost/spirit/home/lex/lexer/lexertl/token.hpp	(original)
+++ branches/release/boost/spirit/home/lex/lexer/lexertl/token.hpp	2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -543,6 +543,23 @@
         }
     };
 
+    ///////////////////////////////////////////////////////////////////////////
+    // Overload debug output for a single token, this integrates lexer tokens 
+    // with Qi's simple_trace debug facilities
+    template <typename Iterator, typename Attribute, typename HasState>
+    struct token_printer_debug<lex::lexertl::token<Iterator, Attribute, HasState> >
+    {
+        typedef lex::lexertl::token<Iterator, Attribute, HasState> token_type;
+
+        template <typename Out>
+        static void print(Out& out, token_type const& val) 
+        {
+            out << '<';
+            spirit::traits::print_token(out, val.value());
+            out << '>';
+        }
+    };
+
 }}}
 
 #endif
Modified: branches/release/boost/spirit/home/qi/nonterminal/simple_trace.hpp
==============================================================================
--- branches/release/boost/spirit/home/qi/nonterminal/simple_trace.hpp	(original)
+++ branches/release/boost/spirit/home/qi/nonterminal/simple_trace.hpp	2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -40,62 +40,11 @@
 {
     namespace detail
     {
-        struct token_printer_aux_for_chars
-        {
-            template<typename Char>
-            static void print(std::ostream& o, Char c)
-            {
-                using namespace std;    // allow for ADL to find the proper iscntrl
-
-                if (c == static_cast<Char>('\a'))
-                    o << "\\a";
-                else if (c == static_cast<Char>('\b'))
-                    o << "\\b";
-                else if (c == static_cast<Char>('\f'))
-                    o << "\\f";
-                else if (c == static_cast<Char>('\n'))
-                    o << "\\n";
-                else if (c == static_cast<Char>('\r'))
-                    o << "\\r";
-                else if (c == static_cast<Char>('\t'))
-                    o << "\\t";
-                else if (c == static_cast<Char>('\v'))
-                    o << "\\v";
-                else if (c < 127 && iscntrl(c))
-                    o << "\\" << std::oct << static_cast<int>(c);
-                else
-                    o << static_cast<char>(c);
-            }
-        };
-
-        // for token types where the comparison with char constants wouldn't work
-        struct token_printer_aux_for_other_types
-        {
-            template<typename Char>
-            static void print(std::ostream& o, Char c)
-            {
-                o << c;
-            }
-        };
-
-        template <typename Char>
-        struct token_printer_aux
-          : mpl::if_<
-                mpl::and_<
-                    is_convertible<Char, char>, is_convertible<char, Char> >
-              , token_printer_aux_for_chars
-              , token_printer_aux_for_other_types>::type
-        {};
-
         template<typename Char>
         inline void token_printer(std::ostream& o, Char c)
         {
             // allow to customize the token printer routine
-#if !defined(BOOST_SPIRIT_DEBUG_TOKEN_PRINTER)
-            token_printer_aux<Char>::print(o, c);
-#else
-            BOOST_SPIRIT_DEBUG_TOKEN_PRINTER(o, c);
-#endif
+            spirit::traits::print_token(o, c);
         }
     }
 
Modified: branches/release/boost/spirit/home/support/attributes.hpp
==============================================================================
--- branches/release/boost/spirit/home/support/attributes.hpp	(original)
+++ branches/release/boost/spirit/home/support/attributes.hpp	2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -187,9 +187,6 @@
 
     ///////////////////////////////////////////////////////////////////////////
     // return the type currently stored in the given variant
-    template <typename T, typename Enable = void>
-    struct variant_which;
-
     template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
     struct variant_which<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
     {
@@ -797,31 +794,6 @@
 
     namespace detail
     {
-        // for stl container data types
-        template <typename Out, typename T>
-        void print_attribute_impl(Out& out, T const& val, mpl::true_)
-        {
-            out << '[';
-            if (!val.empty())
-            {
-                for (typename T::const_iterator i = val.begin(); i != val.end(); ++i)
-                {
-                    if (i != val.begin())
-                        out << ", ";
-                    print_attribute(out, *i);
-                }
-
-            }
-            out << ']';
-        }
-
-        // for non-fusion data types
-        template <typename Out, typename T>
-        void print_attribute_impl2(Out& out, T const& val, mpl::false_)
-        {
-            out << val;
-        }
-
         template <typename Out>
         struct print_fusion_sequence
         {
@@ -843,29 +815,64 @@
             Out& out;
             mutable bool is_first;
         };
+    }
+
+    template <typename Out, typename T, typename Enable>
+    struct print_attribute_debug
+    {
+        // for stl container data types
+        template <typename T_>
+        static void call_impl(Out& out, T_ const& val, mpl::true_)
+        {
+            out << '[';
+            if (!val.empty())
+            {
+                for (typename T_::const_iterator i = val.begin(); i != val.end(); ++i)
+                {
+                    if (i != val.begin())
+                        out << ", ";
+                    print_attribute(out, *i);
+                }
+
+            }
+            out << ']';
+        }
+
+        // for non-fusion data types
+        template <typename T_>
+        static void call_impl2(Out& out, T_ const& val, mpl::false_)
+        {
+            out << val;
+        }
 
         // for fusion data types
-        template <typename Out, typename T>
-        void print_attribute_impl2(Out& out, T const& val, mpl::true_)
+        template <typename T_>
+        static void call_impl2(Out& out, T_ const& val, mpl::true_)
         {
             out << '[';
-            fusion::for_each(val, print_fusion_sequence<Out>(out));
+            fusion::for_each(val, detail::print_fusion_sequence<Out>(out));
             out << ']';
         }
 
         // for non-stl container data types
-        template <typename Out, typename T>
-        void print_attribute_impl(Out& out, T const& val, mpl::false_)
+        template <typename T_>
+        static void call_impl(Out& out, T_ const& val, mpl::false_)
         {
-            print_attribute_impl2(out, val, fusion::traits::is_sequence<T>());
+            call_impl2(out, val, fusion::traits::is_sequence<T_>());
         }
-    }
+
+        // main entry point
+        static void call(Out& out, T const& val)
+        {
+            call_impl(out, val
+              , mpl::and_<is_container<T>, not_is_variant<T, void> >());
+        }
+    };
 
     template <typename Out, typename T>
     inline void print_attribute(Out& out, T const& val)
     {
-        detail::print_attribute_impl(out, val, 
-            mpl::and_<is_container<T>, not_is_variant<T, void> >());
+        print_attribute_debug<Out, T>::call(out, val);
     }
 
     template <typename Out, typename T>
@@ -876,6 +883,65 @@
         else
             out << "<empty>";
     }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // generate debug output for lookahead token (character) stream
+    namespace detail
+    {
+        struct token_printer_debug_for_chars
+        {
+            template<typename Out, typename Char>
+            static void print(Out& o, Char c)
+            {
+                using namespace std;    // allow for ADL to find the proper iscntrl
+
+                if (c == static_cast<Char>('\a'))
+                    o << "\\a";
+                else if (c == static_cast<Char>('\b'))
+                    o << "\\b";
+                else if (c == static_cast<Char>('\f'))
+                    o << "\\f";
+                else if (c == static_cast<Char>('\n'))
+                    o << "\\n";
+                else if (c == static_cast<Char>('\r'))
+                    o << "\\r";
+                else if (c == static_cast<Char>('\t'))
+                    o << "\\t";
+                else if (c == static_cast<Char>('\v'))
+                    o << "\\v";
+                else if (c < 127 && iscntrl(c))
+                    o << "\\" << std::oct << static_cast<int>(c);
+                else
+                    o << static_cast<char>(c);
+            }
+        };
+
+        // for token types where the comparison with char constants wouldn't work
+        struct token_printer_debug
+        {
+            template<typename Out, typename T>
+            static void print(Out& o, T const& val)
+            {
+                o << val;
+            }
+        };
+    }
+
+    template <typename T, typename Enable>
+    struct token_printer_debug
+      : mpl::if_<
+            mpl::and_<
+                is_convertible<T, char>, is_convertible<char, T> >
+          , detail::token_printer_debug_for_chars
+          , detail::token_printer_debug>::type
+    {};
+
+    template <typename Out, typename T>
+    inline void print_token(Out& out, T const& val)
+    {
+        // allow to customize the token printer routine
+        token_printer_debug<T>::print(out, val);
+    }
 }}}
 
 ///////////////////////////////////////////////////////////////////////////////
Modified: branches/release/boost/spirit/home/support/attributes_fwd.hpp
==============================================================================
--- branches/release/boost/spirit/home/support/attributes_fwd.hpp	(original)
+++ branches/release/boost/spirit/home/support/attributes_fwd.hpp	2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -107,6 +107,18 @@
     extract_from(Attribute const& attr, Context& ctx);
 
     ///////////////////////////////////////////////////////////////////////////
+    // return the type currently stored in the given variant
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Enable = void>
+    struct variant_which;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Determine, whether T is a variant like type
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename T, typename Domain>
+    struct not_is_variant;
+
+    ///////////////////////////////////////////////////////////////////////////
     // Clear data efficiently
     ///////////////////////////////////////////////////////////////////////////
     template <typename T, typename Enable = void>
@@ -150,6 +162,22 @@
 
     template <typename Iterator, typename Enable = void>
     struct compare_iterators;
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Print the given attribute of type T to the stream given as Out
+    ///////////////////////////////////////////////////////////////////////////
+    template <typename Out, typename T, typename Enable = void>
+    struct print_attribute_debug;
+
+    template <typename Out, typename T>
+    void print_attribute(Out& out, T const& val);
+
+    template <typename Char, typename Enable = void>
+    struct token_printer_debug;
+
+    template<typename Out, typename T>
+    void print_token(Out& out, T const& val);
+
 }}}
 
 #endif
Modified: branches/release/boost/spirit/home/support/meta_compiler.hpp
==============================================================================
--- branches/release/boost/spirit/home/support/meta_compiler.hpp	(original)
+++ branches/release/boost/spirit/home/support/meta_compiler.hpp	2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -21,6 +21,7 @@
 #include <boost/spirit/home/support/unused.hpp>
 #include <boost/spirit/home/support/assert_msg.hpp>
 #include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/remove_reference.hpp>
 
 namespace boost { namespace spirit
 {
@@ -217,7 +218,8 @@
         template <typename Domain, typename Expr>
         struct matches :
             proto::matches<
-                typename proto::result_of::as_expr<Expr>::type,
+                typename proto::result_of::as_expr<
+                    typename remove_reference<Expr>::type>::type,
                 typename meta_compiler<Domain>::meta_grammar
             >
         {
Modified: branches/release/boost/spirit/include/version.hpp
==============================================================================
--- branches/release/boost/spirit/include/version.hpp	(original)
+++ branches/release/boost/spirit/include/version.hpp	2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -15,6 +15,6 @@
 //
 ///////////////////////////////////////////////////////////////////////////////
 #define SPIRIT_VERSION 0x2040
-#define SPIRIT_PIZZA_VERSION CATFISH_WITH_RASPBERRY_JELLY  // :-)
+#define SPIRIT_PIZZA_VERSION IANS_MEATZA  // :-)
 
 #endif
Modified: branches/release/libs/spirit/doc/karma/directive.qbk
==============================================================================
--- branches/release/libs/spirit/doc/karma/directive.qbk	(original)
+++ branches/release/libs/spirit/doc/karma/directive.qbk	2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -614,7 +614,7 @@
     }}
 
 (for more details see the section describing the compilation process of the 
-__boost_proto__ expression into the corresponding parser expressions).
+__boost_proto__ expression into the corresponding generator expressions).
 
 [table
     [[Expression]       [Semantics]]
Modified: branches/release/libs/spirit/doc/lex/quick_reference.qbk
==============================================================================
--- branches/release/libs/spirit/doc/lex/quick_reference.qbk	(original)
+++ branches/release/libs/spirit/doc/lex/quick_reference.qbk	2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -99,7 +99,7 @@
 [variablelist Spirit.Lex specific Phoenix placeholders
     [[`_start, _end`]          [Iterators pointing to the begin and the end of the
                                 matched input sequence.]]
-    [[`_pass`]                 [Assign `false` to `_pass` to force the current match to fail.]]
+    [[`_pass`]                 [Assign `lex::pass_flags::pass_fail` to `_pass` to force the current match to fail.]]
     [[`_tokenid`]              [The token id of the matched token.]]
     [[`_val`]                  [The token value of the matched token.]]
     [[`_state`]                [The lexer state the token has been matched in.]]
Modified: branches/release/libs/spirit/doc/what_s_new.qbk
==============================================================================
--- branches/release/libs/spirit/doc/what_s_new.qbk	(original)
+++ branches/release/libs/spirit/doc/what_s_new.qbk	2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -38,7 +38,6 @@
 * Added strict mode to __karma__, leaving the current behavior (unchanged) as 
   relaxed mode. Added __karma__ compile time directives `strict[]` and 
   `relaxed[]` allowing to switch between the two.
-* Added __karma__ debug mode.
 
 [heading Bug Fixes]
 
@@ -60,6 +59,22 @@
   doesn't always make sense as it normally would eat up all supplied attribute 
   values).
 * Fixed debug output for variants where a variant element is an STL sequence.
+* Fixed a problem in multi_pass, avoiding to loose a character at end of input
+  when switching iterators.
+
+[heading What's changed in __lex__ from V2.3 (Boost V1.43.0) to V2.4 (Boost V1.44.0)]
+
+[heading New Lexer Features]
+
+* The lexer is now well integrated with the debug output generated by Qi's
+  simple_trace utility. Tokens are printed as: '<' matched sequence '>'.
+
+[heading Lexer Bug Fixes]
+
+* Fixed a problem with using lex::_val as a rvalue in lexer semantic 
+  expressions.
+* Token values are now available for introspection (as an iterator_range) 
+  inside lexer semantic expressions as well.
 
 [endsect] [/ spirit_2_4]
 
Modified: branches/release/libs/spirit/example/karma/Jamfile
==============================================================================
--- branches/release/libs/spirit/example/karma/Jamfile	(original)
+++ branches/release/libs/spirit/example/karma/Jamfile	2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -6,7 +6,11 @@
 #   file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 #==============================================================================
 project spirit-karma-example 
-    : requirements <toolset>gcc:<c++-template-depth>300 : : 
+    : requirements 
+        <toolset>gcc:<c++-template-depth>300
+        <toolset>darwin:<cxxflags>-ftemplate-depth-300
+    :
+    :
     ;
 
 exe actions_example : actions.cpp ;
Modified: branches/release/libs/spirit/example/karma/calc2_ast.hpp
==============================================================================
--- branches/release/libs/spirit/example/karma/calc2_ast.hpp	(original)
+++ branches/release/libs/spirit/example/karma/calc2_ast.hpp	2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -19,10 +19,11 @@
 #define SPIRIT_EXAMPLE_CALC2_AST_APR_30_2008_1011AM
 
 #include <boost/variant.hpp>
-#include <boost/variant/get.hpp>
 #include <boost/spirit/include/phoenix_operator.hpp>
 #include <boost/spirit/include/phoenix_function.hpp>
 #include <boost/spirit/include/phoenix_statement.hpp>
+#include <boost/spirit/include/karma_domain.hpp>
+#include <boost/spirit/include/support_attributes_fwd.hpp>
 
 ///////////////////////////////////////////////////////////////////////////////
 //  Our AST
@@ -82,16 +83,24 @@
         return boost::get<T>(expr.expr);
     }
 
-    // the specialization below tells Spirit to handle expression_ast as if it 
-    // where a 'real' variant
     namespace spirit { namespace traits
     {
-        template <typename T>
-        struct not_is_variant;
-
+        // the specialization below tells Spirit to handle expression_ast as 
+        // if it where a 'real' variant (if used with Spirit.Karma)
         template <>
-        struct not_is_variant<expression_ast>
+        struct not_is_variant<expression_ast, karma::domain>
           : mpl::false_ {};
+
+        // the specialization of variant_which allows to generically extract
+        // the current type stored in the given variant like type
+        template <>
+        struct variant_which<expression_ast>
+        {
+            static int call(expression_ast const& v)
+            {
+                return v.which();
+            }
+        };
     }}
 }
 
Modified: branches/release/libs/spirit/example/karma/calc2_ast_vm.hpp
==============================================================================
--- branches/release/libs/spirit/example/karma/calc2_ast_vm.hpp	(original)
+++ branches/release/libs/spirit/example/karma/calc2_ast_vm.hpp	2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -18,11 +18,12 @@
 #if !defined(SPIRIT_EXAMPLE_CALC2_AST_APR_30_2008_1011AM)
 #define SPIRIT_EXAMPLE_CALC2_AST_APR_30_2008_1011AM
 
-#include <boost/variant/recursive_variant.hpp>
-#include <boost/variant/get.hpp>
+#include <boost/variant.hpp>
 #include <boost/spirit/include/phoenix_operator.hpp>
 #include <boost/spirit/include/phoenix_function.hpp>
 #include <boost/spirit/include/phoenix_statement.hpp>
+#include <boost/spirit/include/karma_domain.hpp>
+#include <boost/spirit/include/support_attributes_fwd.hpp>
 
 ///////////////////////////////////////////////////////////////////////////////
 //  Our AST
@@ -86,12 +87,22 @@
     // where a 'real' variant
     namespace spirit { namespace traits
     {
-        template <typename T>
-        struct not_is_variant;
-
+        // the specialization below tells Spirit to handle expression_ast as 
+        // if it where a 'real' variant (if used with Spirit.Karma)
         template <>
-        struct not_is_variant<expression_ast>
+        struct not_is_variant<expression_ast, karma::domain>
           : mpl::false_ {};
+
+        // the specialization of variant_which allows to generically extract
+        // the current type stored in the given variant like type
+        template <>
+        struct variant_which<expression_ast>
+        {
+            static int call(expression_ast const& v)
+            {
+                return v.which();
+            }
+        };
     }}
 }
 
Modified: branches/release/libs/spirit/example/karma/complex_number_easier.cpp
==============================================================================
--- branches/release/libs/spirit/example/karma/complex_number_easier.cpp	(original)
+++ branches/release/libs/spirit/example/karma/complex_number_easier.cpp	2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -70,7 +70,7 @@
             //  Begin grammar
             (
                !double_(0.0) << '(' << double_ << ", " << double_ << ')'
-            |   omit[double_] << double_ << omit[double_]
+            |   omit[double_] << double_
             ),
             //  End grammar
 
Modified: branches/release/libs/spirit/example/karma/num_list3.cpp
==============================================================================
--- branches/release/libs/spirit/example/karma/num_list3.cpp	(original)
+++ branches/release/libs/spirit/example/karma/num_list3.cpp	2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -112,8 +112,10 @@
                 double real(*it);
                 if (++it != end)
                     vc.push_back(client::complex(real, *it));
-                else
+                else {
                     vc.push_back(client::complex(real));
+                    break;
+                }
             }
 
             std::cout << "-------------------------\n";
Modified: branches/release/libs/spirit/example/karma/simple_columns_directive.hpp
==============================================================================
--- branches/release/libs/spirit/example/karma/simple_columns_directive.hpp	(original)
+++ branches/release/libs/spirit/example/karma/simple_columns_directive.hpp	2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -117,7 +117,7 @@
 namespace boost { namespace spirit { namespace karma
 {
     // This is the factory function object invoked in order to create 
-    // an instance of our iter_pos_parser.
+    // an instance of our simple_columns_generator.
     template <typename Subject, typename Modifiers>
     struct make_directive<custom_generator::tag::columns, Subject, Modifiers>
     {
Modified: branches/release/libs/spirit/example/lex/Jamfile
==============================================================================
--- branches/release/libs/spirit/example/lex/Jamfile	(original)
+++ branches/release/libs/spirit/example/lex/Jamfile	2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -5,8 +5,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)
 #==============================================================================
+project spirit-lexer-example
+    : requirements 
+        <toolset>gcc:<c++-template-depth>300
+        <toolset>darwin:<cxxflags>-ftemplate-depth-300
+    :
+    :
+    ;
 
-project spirit-lexer-example ;
 
 exe example1                : example1.cpp ;
 exe example2                : example2.cpp ;
Modified: branches/release/libs/spirit/example/qi/Jamfile
==============================================================================
--- branches/release/libs/spirit/example/qi/Jamfile	(original)
+++ branches/release/libs/spirit/example/qi/Jamfile	2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -5,7 +5,9 @@
 #   file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
 #==============================================================================
 project spirit-qi-example
-    : requirements <toolset>gcc:<c++-template-depth>300
+    : requirements 
+        <toolset>gcc:<c++-template-depth>300
+        <toolset>darwin:<cxxflags>-ftemplate-depth-300
     :
     :
     ;
Modified: branches/release/libs/spirit/example/qi/adapt_template_struct.cpp
==============================================================================
--- branches/release/libs/spirit/example/qi/adapt_template_struct.cpp	(original)
+++ branches/release/libs/spirit/example/qi/adapt_template_struct.cpp	2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -39,7 +39,7 @@
 namespace boost { namespace spirit { namespace traits 
 {
     template <typename A, typename B>
-    struct transform_attribute<client::data<A, B>, fusion::vector<A&, B&> >
+    struct transform_attribute<client::data<A, B>, fusion::vector<A&, B&>, qi::domain>
     {
         typedef fusion::vector<A&, B&> type;
 
Modified: branches/release/libs/spirit/example/qi/boost_array.cpp
==============================================================================
--- branches/release/libs/spirit/example/qi/boost_array.cpp	(original)
+++ branches/release/libs/spirit/example/qi/boost_array.cpp	2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -32,14 +32,15 @@
               : arr_(arr), current_(0) {}
 
             // expose a push_back function compatible with std containers
-            void push_back(typename array_type::value_type const& val)
+            bool push_back(typename array_type::value_type const& val)
             {
                 // if the array is full, we need to bail out
-                // there is currently no other way of making the parsing fail
+                // returning false will fail the parse
                 if (current_ >= N) 
-                    boost::throw_exception(std::runtime_error("too bad..."));
-                else
-                    arr_[current_++] = val;
+                    return false;
+
+                arr_[current_++] = val;
+                return true;
             }
 
             array_type& arr_;
@@ -86,10 +87,10 @@
     struct push_back_container<
       client::detail::adapt_array<boost::array<T, N> >, T>
     {
-        static void call(client::detail::adapt_array<boost::array<T, N> >& c
+        static bool call(client::detail::adapt_array<boost::array<T, N> >& c
           , T const& val)
         {
-            c.push_back(val);
+            return c.push_back(val);
         }
     };
 }}}
@@ -108,8 +109,8 @@
 
     qi::rule<iterator_type, adapted_type(), ascii::space_type> r = *qi::int_;
 
-    bool result = qi::phrase_parse(iter, end, r, ascii::space
-      , client::adapt_array(arr));
+    adapted_type attr = client::adapt_array(arr);
+    bool result = qi::phrase_parse(iter, end, r, ascii::space, attr);
 
     if (result) 
         std::cout << "Parsed: " << arr[0] << ", " << arr[1] << std::endl;
Modified: branches/release/libs/spirit/example/qi/calc6/calc6c.hpp
==============================================================================
--- branches/release/libs/spirit/example/qi/calc6/calc6c.hpp	(original)
+++ branches/release/libs/spirit/example/qi/calc6/calc6c.hpp	2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -38,13 +38,16 @@
         lexeme
         [
                 vars        [_val = _1]
-            >>  !(alnum | '_') // make sure we have whole words
+            >>  !(alnum | '_')      // make sure we have whole words
         ]
         ;
 
     var_decl =
-            "var"
-        >   !var_ref        // make sure the variable isn't redeclared
+		lexeme[
+			"var"
+			>>  !(alnum | '_')      // make sure we have whole words
+		]         
+		>   !var_ref                // make sure the variable isn't redeclared
         >   identifier      [add_var(_1, ref(nvars))]
         >   (';' | '=' > assignment_rhs(ref(nvars)-1))
         ;
Modified: branches/release/libs/spirit/example/qi/calc7/calc7c.hpp
==============================================================================
--- branches/release/libs/spirit/example/qi/calc7/calc7c.hpp	(original)
+++ branches/release/libs/spirit/example/qi/calc7/calc7c.hpp	2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -43,8 +43,11 @@
         ;
 
     var_decl =
-            "var"
-        >   !var_ref        // make sure the variable isn't redeclared
+		lexeme[
+			"var"
+			>>  !(alnum | '_')	// make sure we have whole words
+		]        
+        >   !var_ref            // make sure the variable isn't redeclared
         >   identifier      [add_var(_1, ref(nvars))]
         >   (';' | '=' > assignment_rhs(ref(nvars)-1))
         ;
Modified: branches/release/libs/spirit/example/qi/mini_c/mini_cc.hpp
==============================================================================
--- branches/release/libs/spirit/example/qi/mini_c/mini_cc.hpp	(original)
+++ branches/release/libs/spirit/example/qi/mini_c/mini_cc.hpp	2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -31,14 +31,16 @@
         lexeme
         [
                 vars        [_val = _1]
-            >>  !(alnum | '_') // make sure we have whole words
+            >>  !(alnum | '_')      // make sure we have whole words
         ]
         ;
 
     var_decl =
-            "int"
-        >>  !(alnum | '_')  // make sure we have whole words
-        >   !var_ref        // make sure the variable isn't redeclared
+            lexeme[
+                "int"
+                >>  !(alnum | '_')  // make sure we have whole words
+            ]
+        >   !var_ref                // make sure the variable isn't redeclared
         >   identifier      [add_var(_1)]
         >   (';' | '=' > assignment_rhs(ref(nvars)-1))
         ;
Modified: branches/release/libs/spirit/example/qi/parse_date.cpp
==============================================================================
--- branches/release/libs/spirit/example/qi/parse_date.cpp	(original)
+++ branches/release/libs/spirit/example/qi/parse_date.cpp	2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -28,7 +28,7 @@
     // a fusion sequence consisting out of three integers as its attribute.
     template<>
     struct transform_attribute<
-        boost::gregorian::date, fusion::vector<int, int, int> >
+        boost::gregorian::date, fusion::vector<int, int, int>, qi::domain>
     {
         typedef fusion::vector<int, int, int> date_parts;
 
Modified: branches/release/libs/spirit/example/scheme/example/scheme/factorial1.cpp
==============================================================================
--- branches/release/libs/spirit/example/scheme/example/scheme/factorial1.cpp	(original)
+++ branches/release/libs/spirit/example/scheme/example/scheme/factorial1.cpp	2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -11,7 +11,7 @@
 #include <iostream>
 #include <fstream>
 
-void ignore_bom(std::ifstream& in)
+bool ignore_bom(std::ifstream& in, char const* filename)
 {
     // Ignore the BOM marking the beginning of a UTF-8 file in Windows
     char c = in.peek();
@@ -24,9 +24,10 @@
         {
             std::cerr << "Error: Unexpected characters from input file: "
                 << filename << std::endl;
-            return 1;
+            return false;
         }
     }
+    return true;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -43,7 +44,8 @@
             << filename << std::endl;
         return -1;
     }
-    ignore_bom(in);
+    if (!ignore_bom(in, filename))
+        return -1;
 
     using scheme::interpreter;
     using scheme::function;
Modified: branches/release/libs/spirit/example/scheme/example/sexpr/sexpr_error_test.cpp
==============================================================================
--- branches/release/libs/spirit/example/scheme/example/sexpr/sexpr_error_test.cpp	(original)
+++ branches/release/libs/spirit/example/scheme/example/sexpr/sexpr_error_test.cpp	2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -45,7 +45,7 @@
     test("(abc \n(\"a string 456) \ndef)", "missing double quote.sexpr");
     test("(abc \n(\"a string\" 0xggg) \ndef)", "erronoeus hex.sexpr");
     test("(abc \n(\"a \\zstring\" 999) \ndef)", "erronoeus escape.sexpr");
-    test("(abc \n(\"a \uzstring\" 999) \ndef)", "erronoeus escape.sexpr");
+    test("(abc \n(\"a \\uzstring\" 999) \ndef)", "erronoeus escape.sexpr");
     return 0;
 }
 
Modified: branches/release/libs/spirit/example/scheme/input/sexpr.hpp
==============================================================================
--- branches/release/libs/spirit/example/scheme/input/sexpr.hpp	(original)
+++ branches/release/libs/spirit/example/scheme/input/sexpr.hpp	2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -122,12 +122,12 @@
             byte_str = lexeme['#' > +hex2 > '#'];
 
             start.name("sexpr");
-            start.name("sexpr");
             list.name("list");
             atom.name("atom");
             symbol.name("symbol");
             integer.name("integer");
             byte_str.name("byte_str");
+
             on_error<fail>(start, error_handler(_1, _2, _3, _4));
         }
 
Modified: branches/release/libs/spirit/example/scheme/output/sexpr.hpp
==============================================================================
--- branches/release/libs/spirit/example/scheme/output/sexpr.hpp	(original)
+++ branches/release/libs/spirit/example/scheme/output/sexpr.hpp	2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -72,7 +72,7 @@
         rule<OutputIterator, utf8_symbol_range()> symbol;
         rule<OutputIterator, utf8_string_range()> string_;
         rule<OutputIterator, binary_range()> byte_str;
-        rule<OutputIterator, nil()> nil;
+        rule<OutputIterator, scheme::nil()> nil;
         rule<OutputIterator, space_type, utree()> ref_;
     };
 }}
Modified: branches/release/libs/spirit/example/scheme/qi/qiexpr_generator.hpp
==============================================================================
--- branches/release/libs/spirit/example/scheme/qi/qiexpr_generator.hpp	(original)
+++ branches/release/libs/spirit/example/scheme/qi/qiexpr_generator.hpp	2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -159,7 +159,7 @@
         delimiting_rule_type start, alternative, permutation, sequence, term;
         delimiting_rule_type grammar_, rule_;
         delimiting_rule_type rule_name, primitive0_rule, alternative_rule;
-        rule<OutputIterator, nil()> nil;
+        rule<OutputIterator, scheme::nil()> nil;
         rule<OutputIterator, scheme::utf8_string()> literal;
         rule<OutputIterator, scheme::utf8_symbol(std::string)> symbol;
         rule<OutputIterator, scheme::utf8_symbol()> any_symbol;
Modified: branches/release/libs/spirit/example/scheme/test/qi/qi_interpreter.cpp
==============================================================================
--- branches/release/libs/spirit/example/scheme/test/qi/qi_interpreter.cpp	(original)
+++ branches/release/libs/spirit/example/scheme/test/qi/qi_interpreter.cpp	2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -50,9 +50,6 @@
         int new_rule()
         {
             rules[index];
-            std::stringstream str;
-            str << qi::what(expr);
-            rules[index].name(str.str());
             return index++;
         }
 
@@ -60,6 +57,9 @@
         void define_rule(int id, Expr const& expr)
         {
             rules[id] = expr;
+            std::stringstream str;
+            str << qi::what(expr);
+            rules[id].name(str.str());
         }
 
         Rule const& operator[](int id) const
Modified: branches/release/libs/spirit/test/qi/symbols.cpp
==============================================================================
--- branches/release/libs/spirit/test/qi/symbols.cpp	(original)
+++ branches/release/libs/spirit/test/qi/symbols.cpp	2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -345,20 +345,20 @@
         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");
-		vars.find("l1");
-		double* d = vars.find("l1");
+    
+    {
+        // remove bug
+        
+        std::string s;
+        symbols<char, double> vars;
+        
+        vars.add("l1", 12.0);
+        vars.add("l2", 0.0);
+        vars.remove("l2");
+        vars.find("l1");
+        double* d = vars.find("l1");
         BOOST_TEST(d != 0);		
-	}
+    }
 
     return boost::report_errors();
 }