https://issues.dlang.org/show_bug.cgi?id=18561

ag0ae...@gmail.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
                 CC|                            |ag0ae...@gmail.com
         Resolution|---                         |DUPLICATE

--- Comment #1 from ag0ae...@gmail.com ---
(In reply to Ajieskola from comment #0)
> Postblits behave inconsistently with constants. As shown in the second
> example, it cannot modify members which are declared as const. But if that
> is wrong, the first one should compile neither, as all the members should be
> treated as const when the whole variable is const.

The first example shouldn't compile.

`title = title.dup;` doesn't do any actual harm, because you're not altering
the original. But consider `title[0] = 'W';`. Now you're changing the original
`title` to "Wondon bridge", and you're doing it through a `const` reference.
That should not be possible. Even worse, the original title could be
`immutable`:

----
import std.stdio;
struct placeAtWorldMap
{   char[] title;

    this(this)
    {   title[0] = 'W'; /* ! */
    }
}
void main()
{   immutable char[] title = "London bridge".dup;
    const place = const placeAtWorldMap(title);
    const samePlace = place;
    title.writeln; // Wondon bridge
}
----

Issue 18357 already covers that problem. Closing as DUPLICATE. Feel free to
revert if you think it's not an exact duplicate.

*** This issue has been marked as a duplicate of issue 18357 ***

--

Reply via email to