[Issue 9665] Structure constant members can not be initialized if have opAssign

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sat Mar 9 08:02:09 PST 2013


http://d.puremagic.com/issues/show_bug.cgi?id=9665


Kenji Hara <k.hara.pg at gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         AssignedTo|nobody at puremagic.com        |andrei at erdani.com


--- Comment #1 from Kenji Hara <k.hara.pg at gmail.com> 2013-03-09 08:01:49 PST ---
This is unfixable problem, if I'm not mistaken.

Currently, compiler always considers opAssign operator overloading for all
field "assignment" in constructor.

struct S {
   T field;
   this(...) { field = xxx; } // If T has opAssign, it is called.
}

But for non-mutable field, opAssign invocation is not legal, because it may
break const correctness.

T* p;
struct T {
   void opAssign(int n) { ...; p = &this; }
}
struct S {
   immutable T field;
   this(...) { field = 1;  // invoke T.opAssign (currently not allowed)
      /* now global p holds mutable pointer to immutable T object! */
   }
}

I have no answer for this issue... So, assigned to Andrei.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list