Index: boost/spirit/home/karma/numeric/detail/numeric_utils.hpp =================================================================== --- boost/spirit/home/karma/numeric/detail/numeric_utils.hpp (revision 58850) +++ boost/spirit/home/karma/numeric/detail/numeric_utils.hpp (working copy) @@ -548,6 +548,29 @@ /////////////////////////////////////////////////////////////////////////// // + // The uint_inserter template takes care of the conversion of any integer + // to a string, while interpreting the number as an unsigned type. + // + /////////////////////////////////////////////////////////////////////////// + template < + unsigned Radix, typename CharEncoding = unused_type + , typename Tag = unused_type> + struct uint_inserter : int_inserter + { + typedef int_inserter base_type; + + // Common code for integer string representations + template + static bool + call(OutputIterator& sink, T const& n) + { + typename detail::absolute_value_helper::result_type un = n; + return base_type::call(sink, un, un, 0); + } + }; + + /////////////////////////////////////////////////////////////////////////// + // // The sign_inserter template generates a sign for a given numeric value. // // The parameter forcesign allows to generate a sign even for positive Index: boost/spirit/home/karma/numeric/uint.hpp =================================================================== --- boost/spirit/home/karma/numeric/uint.hpp (revision 58850) +++ boost/spirit/home/karma/numeric/uint.hpp (working copy) @@ -249,7 +249,7 @@ if (!traits::has_optional_value(attr)) return false; // fail if it's an uninitialized optional - return int_inserter:: + return uint_inserter:: call(sink, traits::extract_from(attr, context)) && delimit_out(sink, d); // always do post-delimiting } @@ -315,7 +315,7 @@ { return false; } - return int_inserter::call(sink, n_) && + return uint_inserter::call(sink, n_) && delimit_out(sink, d); // always do post-delimiting } @@ -325,7 +325,7 @@ bool generate(OutputIterator& sink, Context&, Delimiter const& d , unused_type) const { - return int_inserter::call(sink, n_) && + return uint_inserter::call(sink, n_) && delimit_out(sink, d); // always do post-delimiting } Index: boost/spirit/home/qi/binary/binary.hpp =================================================================== --- boost/spirit/home/qi/binary/binary.hpp (revision 58850) +++ boost/spirit/home/qi/binary/binary.hpp (working copy) @@ -250,7 +250,7 @@ Iterator it = first; for (unsigned int i = 0; i < sizeof(attr_); ++i) { - if (it == last || *bytes++ != *it++) + if (it == last || *bytes++ != static_cast(*it++)) return false; } Index: boost/spirit/home/qi/directive/matches.hpp =================================================================== --- boost/spirit/home/qi/directive/matches.hpp (revision 58850) +++ boost/spirit/home/qi/directive/matches.hpp (working copy) @@ -57,7 +57,7 @@ { bool result = subject.parse(first, last, context, skipper, unused); spirit::traits::assign_to(result, attr); - return result; + return true; } template Index: libs/spirit/test/qi/matches.cpp =================================================================== --- libs/spirit/test/qi/matches.cpp (revision 58850) +++ libs/spirit/test/qi/matches.cpp (working copy) @@ -31,9 +31,9 @@ BOOST_TEST(!test("y", matches[char_('x')])); BOOST_TEST(!test("y", matches['x'])); bool result = true; - BOOST_TEST(!test_attr("y", matches[char_('x')], result) && !result); + BOOST_TEST(test_attr("y", matches[char_('x')], result, false) && !result); result = true; - BOOST_TEST(!test_attr("y", matches['x'], result) && !result); + BOOST_TEST(test_attr("y", matches['x'], result, false) && !result); } return boost::report_errors();