On Friday, 25 February 2022 at 23:05:00 UTC, kdevel wrote:

It seems the template parameter f becomes not aliased to model.read in the presence of the selective import. Bug or feature?

I'd call this a bug. Currently, selective imports are implemented using `alias`es under the hood, which means that the compiler sees your `model` module as having *two* overloads of `read`:

```d
alias read = std.file.read; // from selective import

int read (string filename)
{
    // etc.
}
```

When you pass an overload set to a template that isn't written to handle multiple overloads, it will usually just choose whichever overload comes first in the source code. And since the `public import` statement comes earlier in your source file than the definition of `read`, the `std.file.read` alias is the one that gets chosen when you write `Parameters!read`.

Reply via email to