https://issues.dlang.org/show_bug.cgi?id=14675
--- Comment #1 from Kenji Hara <k.hara...@gmail.com> --- Personally I call the things `T : T*` "self-dependent" or "self-specialized" template parameter. I agree that is one of a strange feature in D. I guess it would be a syntax to declare a type parameter with specialization at once. // C++ template <typename T> class C; template <typename T> class C<T*> { ... } // Equivalent D code class C(T : T*) { ... } It takes one place in template parameter list. When a template argument is _explicitly given_ on the position, it will deduce the parameter T, by matching the argument to the form `T*`. That's the point. Even if you explicitly give template argument, T is always deduced. On the other hand, IFTI deduces T from the function argument types before testing the specialization. After the T determined, specialization test always fail because T won't match to T*. Therefore, we cannot make possible using it along with IFTI. --