On Monday, 2 May 2022 at 16:29:05 UTC, Loara wrote:

Template deduction for aliased function parameter is a very tricky argument and it's not so simple to handle in certain cases. Consider for example this code:

```d
    template MyAlias(T){
      alias MyAlias = int;
    }

    T simp(T)(MyAlias!T val){
      return T.init;
    }

    int main(){
      simp(3);//Impossible to deduce T

Why? That's the issue. It is very possible to deduce T here. Compiler just isn't trying. The function takes an int. Doesn't take a rocket scientist to figure that one out.

simp( cast(MyAlias!string) 4);//Also invalid since MyAlias!string is exactly int

Yes, invalid, as well it should be.

      simp!string(4);//Ok, no parameter deduction
    }
```

No issue here.

Instead to use aliases it's better (both in D and in C++) to use constraints/concepts.

No. It *would* be better if compiler didn't play stupid here. I shouldn't have to write 50+ more lines boilerplate for what the compiler should be able to figure out. I might as well forego the templates and just write explicit overloads. At which point I would question why use templates at all.


Reply via email to