On Wednesday, 22 February 2023 at 20:20:46 UTC, Dark Hole wrote:
I'm trying to rewrite really old D code. There was fragment
like that:
```d
template Foo(T, T[] Array) {
// ...
}
// ...
Bar[] arr;
Foo!(Bar, arr);
```
This gives error `can't read arr in compile time`. Small
changes:
```d
template Foo(T, alias T[] Array) {
// ...
}
// ...
Bar[] arr;
Foo!(Bar, arr);
```
This is valid D, but it doesn't work. It gives error "Error:
template instance `Foo!(Bar, arr)` does not match template
declaration `Foo(T, alias T[] Array)`".
Of course, there is some ways to avoid this error (e.g. check
Array type in if), but I don't undestand why this code doesn't
compiles.
I never used really old D compiler, but the error looks
reasonable to me. The following code should compile - note arr is
"const".
template Foo(T, T[] arr)
{
void boo()
{
}
}
struct Bar
{
}
void main()
{
const Bar[] arr;// = [];
(Foo!(Bar, arr)).boo();
}