On Saturday, 1 September 2018 at 22:38:46 UTC, Ali Çehreli wrote:
You can strip off any attribute with SetFunctionAttributes:

import std.stdio;

// Adapted from std.traits.SetFunctionAttributes documentation
import std.traits;
auto assumeNoGC(T)(T t)
    if (isFunctionPointer!T || isDelegate!T)
{
    enum attrs = functionAttributes!T | FunctionAttribute.nogc;
return cast(SetFunctionAttributes!(T, functionLinkage!T, attrs)) t;
}

void f(T)(auto ref T) {
    writeln("yo");
}

@nogc void main() {
    assumeNoGC(() => f(3));
    // or
    assumeNoGC( { writeln("yo"); });
}

Ali

Ah this works! Can define a debugWriteln then that can be used from anywhere without having to re attribute all the functions.

Thanks!

Reply via email to