Comment #0 by snarwin+bugzilla — 2022-03-11T14:15:37Z
As of DMD 2.099.0, the following program fails to compile:
---
struct HasOpApply
{
int opApply(int delegate(int) dg)
{
if (int result = dg(0)) return result;
return 0;
}
}
void main()
{
foreach (x; 0 .. 1)
{
// ok
static assert(__traits(identifier, __traits(parent, {})) == "main");
}
foreach (x; HasOpApply())
{
// error
static assert(__traits(identifier, __traits(parent, {})) == "main");
}
}
---
The error is:
---
onlineapp.d(21): Error: static assert: `"__foreachbody5" == "main"` is false
---
This happens because __traits(parent) is evaluated after the compiler has transformed the foreach loop into a call to HasOpApply.opApply.
Comment #1 by robert.schadek — 2024-12-13T19:21:25Z