Thread overview
Absence of isAllocator trait
Sep 04, 2021
Per Nordlöw
Sep 06, 2021
Basile B.
Sep 06, 2021
Paul Backus
Sep 06, 2021
Per Nordlöw
September 04, 2021

Is there a reason for the absence of an isAllocator trait under std.experimental.allocator?

September 06, 2021

On Saturday, 4 September 2021 at 19:43:27 UTC, Per Nordlöw wrote:

>

Is there a reason for the absence of an isAllocator trait under std.experimental.allocator?

I had ask a similar Q once and I've been told that (more or less):

It's because the clients of an allocator should rather statically check for specific traits of an allocator, there are too many possible permutations of capabilities possible, not all can allocate and deallocate, not all can reallocate, and so on.

actually I'm 100% sure that what you want is isMallocator and not isAllocator ;)

September 06, 2021

On Monday, 6 September 2021 at 13:24:56 UTC, Basile B. wrote:

>

It's because the clients of an allocator should rather statically check for specific traits of an allocator, there are too many possible permutations of capabilities possible, not all can allocate and deallocate, not all can reallocate, and so on.

According to the documentation, there are two required properties all allocators must have:

  • uint alignment
  • void allocate(size_t size)

So it makes sense to have an isAllocator trait that checks for those, even if clients are expected to check for other properties individually.

September 06, 2021

On Monday, 6 September 2021 at 15:46:52 UTC, Paul Backus wrote:

>
  • void allocate(size_t size)

Should be

  • void[] allocate(size_t size)

Thanks. Here's what I have so far

enum isAllocator(T) = (is(typeof(T.allocate(size_t.init)) == void[]) &&
                       is(typeof(T.alignment) == uint));