D2: Template as an alias to another template instance

Tomek Sowiñski just at ask.me
Thu Dec 24 11:34:49 PST 2009


Stanislav Blinov Wrote:

> Hello,
> 
> I'm trying to make a template that would be an alias to another template 
> instance (sort of a shortcut), but I'm having some difficulties. 
> Consider this code:
> 
> ---
> 
> import std.stdio;
> 
> struct Templ(int N,T){}
> 
> alias Templ!(1,float) Templ1f;
> 
> template Templ1(T)
> {	
> 	alias Templ!(1,T) Templ1;
> }
> 
> void foo1(T)(Templ!(1,T) t){}
> 
> void foo2(T)(Templ1!T t){}
> 
> void main()
> {
> 	Templ1f t1f;
> 	Templ1!(float) t1f1;
> 	foo1(t1f);
> 	foo2(t1f1); // this doesn't compile
> 	// foo2(t1f); // this won't compile either
> }
> 
> ---
> 
> Unfortunately, dmd 2.032 on Windows and 2.037 on Linux both give me this 
> error:
> 
> ---
> 
> templ.d(21): Error: template templ.foo2(T) does not match any function 
> template declaration
> templ.d(21): Error: template templ.foo2(T) cannot deduce template 
> function from argument types !()(Templ!(1,float))
> 
> ---
> 
> I had an impression that aliasing employed in Templ1 would effectively 
> make Templ1 work as a type (a shortcut to Templ!(1,T)), but I don't get 
> this behvior.
> Now, I'm not lazy to declare functions with parameters having full 
> template instance names. It's just that sometimes function declaration 
> will be obvious (or at least cleaner) if its parameters have shorter but 
> meaningful type names instead of generic name with a set of properties 
> (that is, a template name with a full set of template parameters).
> 
> Is there something wrong with my code, am I missing something perhaps?

To my eye it is a compiler bug.


Tomek


More information about the Digitalmars-d-learn mailing list