> On 20 Jan 2015, at 09:57, Akim Demaille <a...@lrde.epita.fr> wrote:
> 
> 
>> Le 19 janv. 2015 à 23:14, Hans Aberg <haber...@telia.com> a écrit :
>> 
>> 
>>> On 19 Jan 2015, at 18:35, Akim Demaille <a...@lrde.epita.fr> wrote:
>>> 
>>>> Le 19 janv. 2015 à 14:28, Hans Aberg <haber...@telia.com> a écrit :
>>>> 
>>>> So it may suffice to have move constructors in the class variant.
>>> 
>>> Right.  With #if around them :)
>> 
>> I succeeded in replacing all copying with move operations in the calc++ 
>> example!
> 
> That's good news, thanks for the experimentation!

Some more inputs:

The variants class might work with both r- and l-values by something like
    template <typename T>
    variant (T&& t)
      : yytypeid_ (&typeid (T))
    {
      YYASSERT (sizeof (T) <= S);
      new (yyas_<T> ()) T (std::forward(t));
    }
but it requires a bit work when T becomes a reference type.

And since you already store a type_info pointer, it should be possible to do 
dynamic lookups by adding say a std::unordered_map<> with dynamic_cast pointers.



Reply via email to