Why are template alias parameters broken?

Menshikov mensikovk817 at gmail.com
Fri Aug 27 19:00:27 UTC 2021


On Friday, 27 August 2021 at 18:47:56 UTC, Menshikov wrote:
> It's work:
>
> ```d
> template Foo(alias var)
> {
>     void inc() { var++; }
> }
>
> void main()
> {
>     int v = 4;
>     alias foo = Foo!(v);
>     foo.inc();
>     assert(v == 5);
> }
> ```
> But it doesn't work:
> ```d
> template Foo(alias var)
> {
>     void inc() { var++; }
> }
>
> void main()
> {
>     struct V{
>       int a;
>     }
>     auto v = V(4);
>     alias foo = Foo!(v.a);
>     foo.inc();//err
>     assert(v.a == 5);
> }
> ```
> Hence this applies to Alias!() and AliasSeq!()

And it doesn't work
```d
template Foo(alias var)
{
     void inc() { var++; }//err
}

void main()
{
     static struct V{
       int a;
     }
     auto v = V(4);
     mixin Foo!(v.a)foo;//err
     foo.inc();
     assert(v.a == 5);
}
```


More information about the Digitalmars-d mailing list