On Wednesday, 25 February 2015 at 19:32:50 UTC, Namespace wrote:
How can I specify that 'func' is @nogc? Or can define the function otherwise?
An alternative solution would be to use function templated on an alias. import std.traits; void glCheck(alias func)(string file = __FILE__, size_t line = __LINE__) @nogc if(isCallable!func) { func(); glCheckError(file, line); } void foo() { new int(5); } //Uses GC void bar() @nogc { /* ... */ } //Does not use GC unittest { //Calling is a little different glCheck!foo; //Does not compile not @nogc glCheck!bar; //Works like a charm. } //If you wanted to take arguments to func //it can be done like this. void glCheck(alias func, string file = __FILE__, size_t line = __LINE__, Args...)(auto ref Args args) @nogc if(isCallable!func) { func(args); glCheckError(file, line); } void buz(string a, uint b, float c) @nogc { /* ... */ } unittest { //Calling looks like this. glCheck!buz("foobar", 0xBAADF00D, 42.0f); }