Template + alias + basic type depends on another parameter = broken?

Elfstone elfstone at yeah.net
Fri Feb 24 01:28:35 UTC 2023


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();

	}



More information about the Digitalmars-d-learn mailing list