[Issue 15648] Destructor constness doesn't take member destructor attributes into account
    via Digitalmars-d-bugs 
    digitalmars-d-bugs at puremagic.com
       
    Sun Jul  2 08:33:31 PDT 2017
    
    
  
https://issues.dlang.org/show_bug.cgi?id=15648
Vladimir Panteleev <dlang-bugzilla at thecybershadow.net> changed:
           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |dlang-bugzilla at thecybershad
                   |                            |ow.net
           Hardware|x86_64                      |All
                 OS|Linux                       |All
--- Comment #1 from Vladimir Panteleev <dlang-bugzilla at thecybershadow.net> ---
I believe the operation destroy(x) where x is an immutable value type was never
supported, as part of destroy's operation is to clobber the value of x with its
.init value - see object.d, the `void destroy(T)(ref T obj) if (is(T ==
struct))` overload. 
Changing the destroy() call with an explicit invocation of the inclusive
destructor (`keys[0].__xdtor();`) does seem to illustrate the problem better, I
think - the inclusive destructor should have its constness inferred from the
destructors it calls:
$ cat test.d 
struct HashTable
{
    immutable(Key)* keys;
    ~this()
    {
        keys[0].__xdtor();
    }
}
struct Key
{
    KeyData data;
    ~this() const {}
}
struct KeyData
{
    ~this() const {}
}
$ dmd -o- test.d
test.d(7): Error: mutable method test.Key.~this is not callable using a
immutable object
--
    
    
More information about the Digitalmars-d-bugs
mailing list