www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Absence of isAllocator trait

reply Per =?UTF-8?B?Tm9yZGzDtnc=?= <per.nordlow gmail.com> writes:
Is there a reason for the absence of an `isAllocator` trait under 
`std.experimental.allocator`?
Sep 04 2021
parent reply Basile B. <b2.temp gmx.com> writes:
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` ;)
Sep 06 2021
parent reply Paul Backus <snarwin gmail.com> writes:
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][1], 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. [1]: https://dlang.org/phobos/std_experimental_allocator_building_blocks.html
Sep 06 2021
parent Per =?UTF-8?B?Tm9yZGzDtnc=?= <per.nordlow gmail.com> writes:
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 ```d enum isAllocator(T) = (is(typeof(T.allocate(size_t.init)) == void[]) && is(typeof(T.alignment) == uint)); ```
Sep 06 2021