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

Reply via email to