I opened a stack overflow question which contains all the needed details http://stackoverflow.com/questions/37868594/disposing-a-class-with-an-interface?lq=1
(In reply to Maik Klein from comment #0) > I opened a stack overflow question which contains all the needed details > > http://stackoverflow.com/questions/37868594/disposing-a-class-with-an- > interface?lq=1 There a dispose overload that works with interface. It's available because you can retrieve the object that implements the interface using "cast(Object) itf". So to me the report is invalid: uint a; interface Bar{} class Foo: Bar { ~this(){a = 1;} } void main() { import std.experimental.allocator.mallocator; import std.experimental.allocator; auto f = Mallocator.instance.make!Foo(); Bar b = f; Mallocator.instance.dispose(b); assert(a == 1); } I think that on S.O you ignore what is done here https://github.com/dlang/phobos/blob/master/std/experimental/allocator/package.d#L1135 This is basically what allows to destroy an object from its interface.
Okay I found the bug. It was using emsi_container as a dependency, even though I did not use it. It seems to have a dependency on std.experimental.allocator version 2.70, which then somehow overshadowed the current version of std.experimental.allocator. And the bug that I am reporting still existed in 2.70 but seems to be fixed in 2.71. So I guess I maybe should report this as an dub issue?
I don't know. It's maybe worth asking Hackerpilot if his fork is still needed, the issues are addressed now, almost a year after the pull to phobos. In emsi containers the submodule allocators is very outdated: https://github.com/Hackerpilot/experimental_allocator/tree/cd8196a5b063b9019ea5529239da3181cc4fdc4f
Looks like we can close this on the stdlib side.