On Thursday, 14 July 2022 at 13:57:24 UTC, realhet wrote:
Hello,

Somehow it can't reach map and array inside a class field initializer. If I put that small expression inside a function, it works. If I encapsulate the initializer expression into a lambda and evaluate it right away, it also works. Only the nice form fails.

Why is that?

```d
import std;

enum E{a, b, c}

static struct S{
    const E e;
    string otherProperties;
}

//trying to initialize an array inside

static if(1) class D{
//this fails: Error: function `onlineapp.D.map!(E[]).map` need `this` to access member `map`
  auto x = [EnumMembers!E].map!(e => S(e)).array;
}
```

Simpler workaround:

```d
  // Explicit type annotation:   vvv
  auto x = [EnumMembers!E].map!((E e) => S(e)).array;
```

This turns the lambda from a template into a normal function, which apparently is enough to un-confuse the compiler. Still unclear why it's getting confused in the first place, though.

Reply via email to