alias using Complex!Double in module ... linker error??
Mike Parker
aldacron at gmail.com
Wed Aug 4 01:10:15 UTC 2021
On Tuesday, 3 August 2021 at 21:40:09 UTC, james.p.leblanc wrote:
> I am getting linker errors with this stripped-down example:
>
> -------------------------------------------
> **my_main.d:**
>
> import std.stdio;
> import std.complex;
> import my_module;
>
>
> void main(){
> my_TYPE xxx;
> writeln(xxx);
> }
>
> -------------------------------------------
> **my_module.d:**
>
> module my_module;
>
> import std.complex;
>
> alias my_TYPE = Complex!double; *// this causes link error:
> "undefined reference"*
>
> /* alias my_TYPE = double; */ *// this works fine*
>
> ------------------------------------------
>
> Why does the linker fail when I alias to the Complex!double ...
> but would work fine when alias to the double ??
>
> Any help to understand what is greatly appreciated.
> James
The alias to Complex!double is a template instantiation. A
template instantiation creates a symbol that needs to be linked.
So you need to compile my_module.d along with my_main.d.
```
dmd my_main.d my_module.d
```
Or alternatively:
```
dmd -i my_main.d
```
double is a built-in type, so that alias doesn't create any
symbols that need linking.
An alias in and of itself is a compile-time-only construct, but
the symbols you assign it might require linking something.
More information about the Digitalmars-d-learn
mailing list