On Friday, 3 June 2016 at 11:52:52 UTC, Andrei Alexandrescu wrote:
On 6/3/16 7:47 AM, maik klein wrote:
I rely a lot on std.experimental.alloctor for my "game
engine". I have
just finished creating my own version for "Algebraic" and I
want to
disable to default construction as it would make no sense.
I have also created my own containers, the problem is that I
can not use
my version of "Algebraic" in any of my containers because all
of them
are using std.experimental.alloctor.makeArray which can not be
used with
non default constructible types.
While I don't want to have any default constructed type of
Algebraic, I
really don't care for uninitialized values that I will never
use anyway.
I am sure there is a workaround with unions but it would be
nice if
makeArray/expandArray would just support non default
constructible types.
Thoughts?
Looks like a bug. Do you have a short repro? -- Andrei
import std.experimental.allocator;
struct Foo{
@disable this();
}
auto foos = theAllocator.makeArray!Foo(100);
Error messsage:
../../.dub/packages/experimental_allocator-2.70.0-b1/src/std/experimental/allocator/package.d(576,34):
Error: variable
std.experimental.allocator.uninitializedFillDefault!(Foo).uninitializedFillDefault.t
default construction is disabled for type immutable(Foo)
../../.dub/packages/experimental_allocator-2.70.0-b1/src/std/experimental/allocator/package.d(612,36):
Error: template instance
std.experimental.allocator.uninitializedFillDefault!(Foo) error instantiating
source/breeze/util/algebraic.d(91,43): instantiated from
here: makeArray!(Foo, IAllocator)