http://d.puremagic.com/issues/show_bug.cgi?id=7529
--- Comment #14 from Kenji Hara <k.hara...@gmail.com> 2012-02-17 07:59:59 PST --- (In reply to comment #12) > An alias template is like a function template, just for aliases. > > Those are all alias templates: > > template A(T){alias T A;} > template B(T){alias Foo!T B;} > template C(T){alias foo.bar.Qux!T C;} > template D(T){alias Foo!(Bar!(Qux!T)) D;} > > Those are functions that use them: > void fooa(T)(A!T a){ ... } > void foob(T)(B!T b){ ... } > void fooc(T)(C!T c){ ... } > void food(T)(D!T d){ ... } > > Those are the versions that do exactly the same thing but work with IFTI: > void fooa(T)(T a){ ... } > void foob(T)(Foo!T b){ ... } > void fooc(T)(foo.bar.Qux!T c){ ... } > void food(T)(Foo!(Bar!(Qux!T)) d){ ... } > > What I am asking for is for IFTI to work the same for the former and latter > versions of the functions. This is easy to implement and matches what most > programmers would expect the language to be capable of. OK, I almost understand what you expects. When the two declarations exist, > template B(T){alias Foo!T B;} > void foob(T)(B!T b){ ... } and calling foob with IFTI like follows: Foo!int x; foob(x); // foob(T)(B!T) is converted to foob(T)(Foo!T) // *with expanding template B*, then foob deduces T as int. OK? ----- There is some problems about this enhancement. 1) This enhancement requires adding a phase to expanding eponymous templates used as function parameter type. This makes IFTI process more complicate. 2) Some eponymous templates are not one liner. template X(T) { template Y(U) { ... } // massive type calculation alias Y!T X; // also eponymous template } void foo(T)(X!T) { ... } Should compiler calculate T from X!T? It is almost impossible! If it only works with one-linear eponymous template, it is less benefit than the semantic complexity. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------