[Issue 24231] New: Can't emplace immutable nested class
    d-bugmail at puremagic.com 
    d-bugmail at puremagic.com
       
    Tue Nov  7 01:26:09 UTC 2023
    
    
  
https://issues.dlang.org/show_bug.cgi?id=24231
          Issue ID: 24231
           Summary: Can't emplace immutable nested class
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Severity: normal
          Priority: P1
         Component: druntime
          Assignee: nobody at puremagic.com
          Reporter: snarwin+bugzilla at gmail.com
As of DMD 2.105.3, the following program fails to compile.
---
void main()
{
        import core.lifetime;
        class O
        {
                int n = 123;
                class I
                {
                        int fun() => n;
                }
        }
        auto buf = new void[](__traits(classInstanceSize, O.I));
        emplace!(immutable(O.I))(buf, new immutable(O));
}
---
The error message is:
---
/usr/include/dmd/druntime/import/core/lifetime.d(116): Error: cannot modify
`immutable` expression `chunk.this`
/usr/include/dmd/druntime/import/core/lifetime.d(209): Error: template instance
`core.lifetime.emplace!(immutable(I), immutable(O))` error instantiating
test.d(14):        instantiated from here: `emplace!(immutable(I),
immutable(O))`
---
This is caused by emplace attempting to set the .outer field of the emplaced
class instance to the value of its second argument (new immutable(O)). The
assignment fails, because the emplaced instance is immutable, and its fields
cannot be written to.
--
    
    
More information about the Digitalmars-d-bugs
mailing list