Aliasing specialized template stuct in his module leads troubles

Rob T alanb at ucora.com
Fri Feb 15 17:46:03 PST 2013


On Tuesday, 4 September 2012 at 22:46:00 UTC, Ivan Agafonov wrote:
> I have my library module:
> ========================================================
> module mylib.vector;
>
> // alias Vector!(float, 4) Vector4f;
>
> struct Vector(T, uint size)
> {
> 	T[size] array = 0;
> 	...
> }
> ========================================================
>
> And I have client module:
> ========================================================
> import mylib.vector;
>
> alias Vector!(float, 4) Vector4f;
> 	
> void main()
> {
> 	auto x = Vector4f([1.0f, 2.0f, 3.0f, 4.0f]);
> }
> ========================================================
>
> If alias would be in vector module (commented there) I will 
> have to compile
> both modules (otherwise I'll get link errors for some vector 
> functions), but I want to simply import vector module and 
> immediately use predefined aliases for vector template struct. 
> How can I do this?


I've encountered the exact same problem.

I create an alias to define a specific type out of a template in 
the same library module that the template resides in. I can build 
the library OK, but when I build an executable and link in the 
library, the linker chokes out with an undefined symbol names.

If I comment out the alias, and instead define the same alias in 
each module where it is being used, I can rebuild my library and 
the executable OK.

This looks like a bug to me. The mystery is why almost no one is 
complaining about it, so it must be that just about nobody 
defines template aliases in this way.

I'll wait a while to see if there are any more comments before 
filing a bug report

--rt


More information about the Digitalmars-d-learn mailing list