On Friday, 10 February 2017 at 09:03:16 UTC, berni wrote:


Now I tried this with a named instead of a magic constant e.g.

immutable VALUE=-1;
arr.each!"a[]=VALUE";

And it doesn't work anymore. I've no clue, why... Can you help me?

each is a template. As per the template documentation [1], your instantiation of each knows nothing about VALUE, because VALUE declared in the scope in which the template is instantiated. Template instantiations only have the scope in which they are implemented, not where they are instantiated, so here each cannot see VALUE.

On an side note (unrelated to your error), when declaring constants that are intended to be symbolic (i.e. you never need to take their address), it's more idiomatic to use manifest constants (via enum) rather than immutable.

enum value = -1;

[1] https://dlang.org/spec/template.html#instantiation_scope

Reply via email to