@nogc with opApply
Alex
sascha.orlov at gmail.com
Sat Aug 11 10:00:34 UTC 2018
Hi all,
maybe I misunderstand something but having this:
´´´
import std.experimental.all;
static assert(isIterable!S);
void main()
{
S s;
s.each!(el => el.writeln);
}
struct S
{
private Nullable!uint member = 0;
Nullable!uint front() @nogc { return member; }
//void popFront(){} // not implementable.
//bool empty(){} // not implementable
Nullable!uint successor(uint current) @nogc { return
Nullable!uint.init; }
/**
the opApply method grants the correct foreach behavior
*/
int opApply(scope int delegate(ref uint) /*@nogc*/
operations) //@nogc
{
int result;
for(auto leading = front; !leading.isNull; leading =
successor(leading.get))
{
result = operations(leading.get);
if(result)
{
break;
}
}
return result;
}
}
´´´
Everything works fine, before I try to use the opApply function
inside a @nogc function.
If I do, compiler complains, that opApply is not marked as @nogc.
Ok.
If I try to mark opApply @nogc, I would have to mark operations
delegate also as @nogc, but I can't do this, as I do not know a
priori, how it will be used.
Now, as I learned at some point, a possibility would be, to
templatify the function, as the compiler can then derive, if
@nogc apply or not.
But if I write
´´´
int opApply()(...){...}
´´´
Then the static assert from above refuses to compile.
So... how to solve this case?
More information about the Digitalmars-d-learn
mailing list