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