Thread overview
why is it a class property cannot be used like a.b ~= c; ?
Sep 04, 2021
someone
Sep 04, 2021
jfondren
Sep 05, 2021
someone
September 04, 2021
public class cSomething {

   private:

   dstring pstrWhatever = null;

   public:

   @safe dstring whatever() { return pstrWhatever; }
   @safe void whatever(const dstring lstrWhatever) { pstrWhatever = lstrWhatever; }

}

void main() {

   cSomething lobjSomething = new cSomething();
   lobjSomething.whatever = r"abc"d;
   lobjSomething.whatever ~= r"def"d; /// Error: `lobjSomething.whatever()` is not an lvalue and cannot be modified

}
September 04, 2021

On Saturday, 4 September 2021 at 23:33:39 UTC, someone wrote:

>
public class cSomething {

   private:

   dstring pstrWhatever = null;

   public:

   @safe dstring whatever() { return pstrWhatever; }
   @safe void whatever(const dstring lstrWhatever) { pstrWhatever = lstrWhatever; }

}

void main() {

   cSomething lobjSomething = new cSomething();
   lobjSomething.whatever = r"abc"d;
   lobjSomething.whatever ~= r"def"d; /// Error: `lobjSomething.whatever()` is not an lvalue and cannot be modified

}

You're returning a copy of a slice, so if this compiled nothing useful would happen anyway. This works if whatever() returns ref dstring instead, with no other changes. Search https://dlang.org/spec/function.html for 'lvalue' and this pops right up.

September 05, 2021

On Saturday, 4 September 2021 at 23:57:09 UTC, jfondren wrote:

>

You're returning a copy of a slice, so if this compiled nothing useful would happen anyway. This works if whatever() returns ref dstring instead, with no other changes. Search https://dlang.org/spec/function.html for 'lvalue' and this pops right up.

At first glance it seems a bit counter-intuitive but yes, you are right, thanks for the link jfronden :)