help-bison
[Top][All Lists]
Advanced

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

Re: Possible to declare move constructor of basic_symbol as noexcept?


From: Akim Demaille
Subject: Re: Possible to declare move constructor of basic_symbol as noexcept?
Date: Thu, 7 Jan 2021 06:30:14 +0100

Hi Adrian,

> Le 6 janv. 2021 à 20:43, Adrian <withoutpointk@gmail.com> a écrit :
> 
> Hello,
> 
> Is there any possibility we can declare the move constructor of
> basic_symbol as noexcept (if the semantic_types are noexcept
> moveable)?
> 
> I have a semantic value that is non-copyable (moveable only) and I
> want an std::vector<symbol_type>. std::vector only calls the move
> constructor when resizing if the move constructor is declared noexcept
> 
> It seems to me that the issue might be that you would require all of
> the semantic types to be noexcept moveable. You would need a
> (potentially huge) noexcept predicate, but since it's generated code
> maybe it's ok

My C++ is rusting.  What exactly are you asking for?  From

> #if 201103L <= YY_CPLUSPLUS
>       /// Move constructor.
>       basic_symbol (basic_symbol&& that)
>         : Base (std::move (that))
>         , value ()
>       {
>         switch (this->kind ())
>     {
>       case symbol_kind::S_NUMBER: // NUMBER
>         value.move< int > (std::move (that.value));
>         break;
> 
>       case symbol_kind::S_TEXT: // TEXT
>       case symbol_kind::S_item: // item
>         value.move< std::string > (std::move (that.value));
>         break;
> 
>       case symbol_kind::S_list: // list
>         value.move< std::vector<std::string> > (std::move (that.value));
>         break;
> 
>       default:
>         break;
>     }
> 
>       }
> #endif

to go to

> #if 201103L <= YY_CPLUSPLUS
>       /// Move constructor.
>       basic_symbol (basic_symbol&& that)
>         noexcept (
>           std::is_nothrow_move_constructible< int >::value
>           && std::is_nothrow_move_constructible< std::string >::value
>           && std::is_nothrow_move_constructible< std::vector<std::string> 
> >::value
> 
>         )
>         : Base (std::move (that))
>         , value ()

right?


reply via email to

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