pure opApply
Q. Schroll via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Thu Mar 31 03:23:18 PDT 2016
Simple as that, shouldn't this work?
struct X
{
int opApply(int delegate(string) dg)
{
return dg("impure");
}
int opApply(int delegate(string) pure dg) pure
{
return dg("pure");
}
}
void main()
{
X x;
string result;
x.opApply(
(string s)
{
result = s;
return 0;
}
);
writeln(result); // does compile and prints "pure".
x.opApply(
(string s)
{
result = s;
write("");
return 0;
}
);
writeln(result); // does compile and prints "impure".
/+ (1)
foreach (string s; x)
{
result = s;
}
writeln(result); // does not compile: x.opApply matches more
than one declaration
+/
/+ (2)
foreach (string s; x)
{
result = s;
write("");
}
writeln(result); // does not compile: x.opApply matches more
than one declaration
+/
}
Can someone explain me, why the compiler cannot resolve the right
opApply? From what I know, it generates a delegate with inferred
pure attribute and looks for the best match of opApply. Why does
the manual rewrite work? If I've done the rewrite improperly,
please tell me.
More information about the Digitalmars-d-learn
mailing list