On Friday, 11 December 2020 at 11:32:09 UTC, rikki cattermole wrote:
string is not a built in type. It is an alias defined by druntime.

https://github.com/dlang/druntime/blob/master/src/object.d#L35

int on the other hand is defined by the compiler. It understands it.

It doesn't magically understand it. `int` is a keyword and thus not a legal identifier. From a grammar perspective, in `(x, y) { }`, x and y are parsed as types. [1] However, in lambda expressions, when there's a type only and no parameter (according to the grammar) given, the compiler treats a single identifier as a parameter with inferred type. Since `int` is not an identifier, but a keyword, that treatment does not happen. As you explained correctly, `string` is merely an identifier and thus seen as a parameter name.

[1] https://dlang.org/spec/grammar.html#Parameters

Reply via email to