Error: cannot implicitly convert expression (this) of type const(S) to S

Jonathan M Davis jmdavisProg at gmx.com
Sat Sep 18 14:24:41 PDT 2010


On Saturday 18 September 2010 06:45:51 Ivo Kasiuk wrote:
> Am Samstag, den 18.09.2010, 02:15 -0700 schrieb Jonathan M Davis:
> > Okay, if I try and compile the following program.
> > 
> > struct S
> > {
> > 
> >     @property S save() const
> >     {
> >     
> >         return this;
> >     
> >     }
> >     
> >     int[] _val;
> > 
> > }
> > 
> > void main()
> > {
> > }
> 
> Actually, wouldn't it be much more simple to just copy the struct
> instance directly, without a save() method:

No. The whole point here is to have a save() method. It's for a range, and 
forward ranges have the save() method because a range doesn't necessarily have 
to be a struct and just doing a straight up copy with a class doesn't work.

> 
> S s1;
> S s2 = s1;
> 
> And you could add a postblit to control the copy behavior concerning
> _val.
> 
> Or if save() is supposed to behave different than normal copying maybe
> something like this could be the solution:
> 
> S save() const {
>   return S(_val.dup);
> }

For some reason, I haven't gotten postblit to work. Outright creating a new one 
that's the same rather than trying to use the automatic copy mechanisms does 
seem like a good idea though. Thanks.

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list