Cannot dispose const array?

Alexandru Ermicioi alexandru.ermicioi at gmail.com
Wed Aug 8 18:41:32 UTC 2018


Hi Dlang community!

I've stumbled on an interesting issue with allocators. It seems 
that we can't get disposed of arrays with const or immutable 
data. Consider example below:

Link: https://run.dlang.io/is/frnQI8
------------------------------------
import std.stdio;
import std.range;
import std.algorithm;
import std.experimental.allocator;
import std.experimental.allocator.mallocator;

void main(string[] args) {
     const(int)[] values = Mallocator.instance.makeArray!(const 
int)([1, 2, 3, 4]);
     writeln(values);

     Mallocator.instance.dispose(values);
}
------------------------------------

We'd get following error:
/dlang/dmd/linux/bin64/../../src/phobos/std/experimental/allocator/package.d(2398): Error: function std.experimental.allocator.mallocator.Mallocator.deallocate(void[] b) shared is not callable using argument types (const(int)[]) shared
/dlang/dmd/linux/bin64/../../src/phobos/std/experimental/allocator/package.d(2398):        cannot pass argument array of type const(int)[] to parameter void[] b

onlineapp.d(11): Error: template instance 
`std.experimental.allocator.dispose!(shared(Mallocator), 
const(int))` error instantiating

Is it expected to not be able to dispose out of immutable or 
const data, or it is a bug that should be fixed?

Regards,
Alexandru.


More information about the Digitalmars-d-learn mailing list