bug-bison
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: C++ token move constructors/assignment with LALR


From: Frank Heckenbach
Subject: Re: C++ token move constructors/assignment with LALR
Date: Fri, 22 Apr 2022 02:31:17 +0200

Anthony Heading wrote:

> Totally right, yes it is only the move assignment which was missing / now 
> hidden,  and that's actually the most immediate problem.   Assuming of course 
> it's agreed to be a problem at all,  as I concur the skeleton doesn't use it. 
>    I think the issue arises if the user wants to assign the tokens (which I 
> think is natural, e.g. for lexer putback and so on) and starts even with 
> simple types.
> 
> int main() {
>     parser::symbol_type sym;
>     sym = yylex();
>     return 0;
> }
>
> So because there is no move assignment operator,  C++ tried to fall back to 
> (implicit) copy assignment, but it can't even manage that because there IS a 
> move constructor.

I see. My lexers don't contain any move-assignment, so I never
noticed, but if I add one, I get the same error.

In the example above, of course, it's easy to avoid by replacing

  parser::symbol_type sym;
  sym = yylex();

with

  auto sym = yylex();

but that won't work in every case.

> Enabling the move assignment operator in the skeleton fixes this,  and works 
> for unique_ptr etc too.

Seems useful. If you can make a patch and send it here, or if that's
easy for you, make a pull request on https://github.com/akimd/bison/
or upload on Savannah Git, it'll hopefully be easy for Akim to merge.

Viele Grüße,
Frank



reply via email to

[Prev in Thread] Current Thread [Next in Thread]