[Boost-bugs] [Boost C++ Libraries] #9580: [spirit.lex] self("state") += calls a wrong operator +=

Subject: [Boost-bugs] [Boost C++ Libraries] #9580: [spirit.lex] self("state") += calls a wrong operator +=
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2014-01-16 00:38:18


#9580: [spirit.lex] self("state") += calls a wrong operator +=
-------------------------------------+---------------------
 Reporter: Vyacheslav Andrejev | Owner: djowel
     Type: Bugs | Status: new
Milestone: To Be Determined | Component: spirit
  Version: Boost Development Trunk | Severity: Problem
 Keywords: |
-------------------------------------+---------------------
 This construct
 {{{
 #!cpp
       this->self("SOME_STATE") += someTokenDef;
 }}}
 doesn't call
 {{{
 #!cpp
         template <typename LexerDef, typename Expr>
         inline lexer_def_<LexerDef>&
         boost::spirit::lex::detail::operator+= (lexer_def_<LexerDef>&
 lexdef, Expr&& xpr)
 }}}
 as it should in order for the definition get added to the lexer. Instead
 this operator
 {{{
 #!cpp
         template <typename Left, typename Right>
         typename boost::proto::detail::enable_binary<
             deduce_domain
           , deduce_domain::proto_grammar
           , boost::mpl::or_<is_extension<Left>, is_extension<Right> >
           , boost::proto::tag::plus_assign
           , Left const &
           , Right const &
>::type const
         operator +=(Left &&left, Right &&right)
         {
             return boost::proto::detail::make_expr_<
                 boost::proto::tag::plus_assign
               , deduce_domain
               , Left const &
               , Right const &
>()(left, right);
         }
 }}}
 is called from boost::proto::exprns_ namespace.

-- 
Ticket URL: <https://svn.boost.org/trac/boost/ticket/9580>
Boost C++ Libraries <http://www.boost.org/>
Boost provides free peer-reviewed portable C++ source libraries.

This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:15 UTC