Checking @nogc-ness of an Allocator.allocate()

Seb seb at wilzba.ch
Thu Jan 11 15:54:49 UTC 2018


On Thursday, 11 January 2018 at 13:18:47 UTC, Simen Kjærås wrote:
> On Thursday, 11 January 2018 at 12:32:54 UTC, Per Nordlöw wrote:
>> Is this an ok implementation:
>>
>> enum bool isNogc(alias fun) = (isCallable!fun &&
>>                                (functionAttributes!fun &
>>                                 FunctionAttribute.nogc));
>>
>> @safe pure nothrow @nogc unittest
>> {
>>     static int foo(int x) @nogc pure nothrow;
>>     static int goo(int x) pure nothrow;
>>     static assert(isNogc!foo);
>>     static assert(!isNogc!goo);
>> }
>
> Seems to be working fine. I'd go with this version for perhaps 
> a bit more brevity and clarity:
>
> enum bool isNogc(alias fun) = hasFunctionAttributes!(fun, 
> "@nogc");
>
> Both functionAttributes and hasFunctionAttributes already check 
> that the argument is a callable (which function attributes 
> should "foo" have?), so that's unnecessary.
>
> --
>   Simen

Author of hasFunctionAttributes here.

FYI: `hasFunctionAttributes` is exactly intended to be used how 
you do it. functionAttributes is only there for legacy reasons.
And it works nicely with inference too:

https://run.dlang.io/is/9OXZct


More information about the Digitalmars-d-learn mailing list