Template arg deduction

Tejas notrealemail at gmail.com
Wed Jul 7 19:49:54 UTC 2021


On Wednesday, 7 July 2021 at 19:14:52 UTC, Kevin Bailey wrote:
> I'm trying to use some fairly simple template argument 
> deduction, but
> maybe I'm not getting the syntax correct. C++ doesn't event 
> blink at
> something like this, but D is giving me:
>
> temptest.d(18): Error: template temptest.func cannot deduce 
> function from argument types !()(bar), candidates are:
> temptest.d(10):        func(T)(foo!T.bar f)
>
> I guess D can't crack open a type like that?
>
> ```
> template foo(T)
> {
> class bar
> {
>         T t;
> }
>
> }
>
> void func(T)(            // 10
>         foo!(T).bar f)
> {
> }
>
> int main()
> {
>         foo!int.bar fi;
>         func(fi);        // 18
> }
> ```



     The following works:
     ```d
     import std.stdio;
     template foo(T)
     {
     class bar
     {
             T t;
     }

}

     void func(T) (            // 10
             T f)               //  No need to repeat 
foo!(int).bar :)
     {
     }

     int main()
     {
             foo!(int).bar fi;//brackets added, now syntax is 
correct
             func(fi);        // 18. int couldn't get deduced here
         return 0;
     }
     ```


More information about the Digitalmars-d-learn mailing list