Thread overview | |||||
---|---|---|---|---|---|
|
July 15, 2018 std.experimental.allocator and const etc. | ||||
---|---|---|---|---|
| ||||
Currently the API's don't support const(void)[], e.g. import std.experimental.allocator : makeArray, theAllocator, dispose; import std.experimental.allocator.mallocator : Mallocator; void main() { const a = theAllocator.makeArray!ubyte(100); theAllocator.dispose(a); // can't call RCIAllocator.deallocate(void[] b) with const(ubyte)[] const(void)[] b = Mallocator.instance.allocate(100); Mallocator.instance.deallocate(b); // can't call Mallocator.deallocate(void[] b) with const(void)[] } Is this deliberate? It's pretty annoying. |
July 16, 2018 Re: std.experimental.allocator and const etc. | ||||
---|---|---|---|---|
| ||||
Posted in reply to John Colvin | On Sunday, 15 July 2018 at 13:06:16 UTC, John Colvin wrote:
> Currently the API's don't support const(void)[], e.g.
>
> import std.experimental.allocator : makeArray, theAllocator, dispose;
> import std.experimental.allocator.mallocator : Mallocator;
>
> void main()
> {
> const a = theAllocator.makeArray!ubyte(100);
> theAllocator.dispose(a);
> // can't call RCIAllocator.deallocate(void[] b) with const(ubyte)[]
>
> const(void)[] b = Mallocator.instance.allocate(100);
> Mallocator.instance.deallocate(b);
> // can't call Mallocator.deallocate(void[] b) with const(void)[]
> }
>
> Is this deliberate? It's pretty annoying.
Probably not, the lifetime of the referenced memory is over. There's a couple of other places where we cast away const and shared before destroying and object.
|
July 17, 2018 Re: std.experimental.allocator and const etc. | ||||
---|---|---|---|---|
| ||||
Posted in reply to John Colvin | On 7/15/18 9:06 AM, John Colvin wrote:
> Currently the API's don't support const(void)[], e.g.
>
> import std.experimental.allocator : makeArray, theAllocator, dispose;
> import std.experimental.allocator.mallocator : Mallocator;
>
> void main()
> {
> const a = theAllocator.makeArray!ubyte(100);
> theAllocator.dispose(a);
> // can't call RCIAllocator.deallocate(void[] b) with const(ubyte)[]
>
> const(void)[] b = Mallocator.instance.allocate(100);
> Mallocator.instance.deallocate(b);
> // can't call Mallocator.deallocate(void[] b) with const(void)[]
> }
>
> Is this deliberate? It's pretty annoying.
I don't think it's something that was considered. I would expect at least dispose to support it by casting away const.
-Steve
|
Copyright © 1999-2021 by the D Language Foundation