[Issue 23666] Recognize template opApply pattern
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Wed May 29 10:15:49 UTC 2024
https://issues.dlang.org/show_bug.cgi?id=23666
--- Comment #3 from Bolpat <qs.il.paperinik at gmail.com> ---
(In reply to Nick Treleaven from comment #2)
> You can use `auto opApply` to infer attributes instead of a template.
```d
struct S
{
auto opApply(int delegate(ref int) callback)
{
int x;
return callback(x);
}
}
void main() @safe
{
foreach (ref x; S()) {} // Error: `@safe` function `D main` cannot call
`@system` function `S.opApply`
}
```
However, this does (for reasons beyond my understanding):
```d
struct S
{
int opApplyImpl(DG : int delegate(ref int))(scope DG callback)
{
int x;
return callback(x);
}
alias opApply = opApplyImpl!(int delegate(ref int));
}
void main() @safe
{
foreach (ref x; S()) {}
}
```
--
More information about the Digitalmars-d-bugs
mailing list