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!