<div dir="ltr"><div>main.d:</div><div>----------</div><div>struct A(T, int D) {</div><div>  this(string ignore){}</div><div>}</div><div><br></div><div>alias B(T)=A!(T, 1);</div><div><br></div><div>void fun1(T)(A!(T,1) a) { }</div><div>void fun2(T)(B!T a) { }</div><div><br></div><div>unittest{</div><div>  auto a=A!(double,1)("a");</div><div>  assert(is(typeof(a) == B!double));</div><div>  fun1(a);//ok</div><div><br></div><div>  fun2!double(a);//ok</div><div><br></div><div>  // no IFTI here:</div><div>  //fun2(a);//not ok:</div><div>  //fun2 cannot deduce function from argument types !()(A!(double, 1)), candidates are...</div><div>}</div><div><div>----------</div></div><div><br></div><div><br></div><div>C++ works fine here:</div><div><br></div><div><br></div><div>main.cc:</div><div><div>----------</div></div><div><div>template<class T, int D></div><div>class A {</div><div>};</div><div><br></div><div>template <class T></div><div>using B = A<T, 1>;</div><div><br></div><div>template <class T></div><div>void fun(B<T> a) { }</div><div><br></div><div>void test(){</div><div>  A<double,1>a;</div><div>  fun(a);</div><div>}</div></div><div><div>----------</div></div><div><br></div><div>I can use a workaround but it makes the code uglier. What's the recommended way around this?</div><div>Could we support this as in C++?</div><div><br></div></div>