template instance does not match template declaration
Paul Backus
snarwin at gmail.com
Fri Feb 25 23:17:14 UTC 2022
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`.
More information about the Digitalmars-d-learn
mailing list