digitalmars.D.bugs - [Issue 11452] New: template alias doesn't work with default template arguments
- d-bugmail puremagic.com (42/42) Nov 06 2013 https://d.puremagic.com/issues/show_bug.cgi?id=11452
- d-bugmail puremagic.com (21/21) Nov 06 2013 https://d.puremagic.com/issues/show_bug.cgi?id=11452
- d-bugmail puremagic.com (30/30) Nov 06 2013 https://d.puremagic.com/issues/show_bug.cgi?id=11452
https://d.puremagic.com/issues/show_bug.cgi?id=11452 Summary: template alias doesn't work with default template arguments Product: D Version: D2 Platform: x86_64 OS/Version: Linux Status: NEW Severity: minor Priority: P2 Component: DMD AssignedTo: nobody puremagic.com ReportedBy: atila.neves gmail.com --- template_alias.d: struct Foo(uint LENGTH, T = bool) { } template Foos(uint SIZE, T = bool) { alias Foo!(SIZE, T)[] Foos; } void func1(uint num, uint size)(Foo!(size)[]) { } void func2(uint num, uint size)(Foos!(size)) { } void main() { Foo!(4)[] foos; func1!(2)(foos); //compiles func2!(2)(foos); //doesn't compile } dmd template_alias.d template_alias.d(18): Error: template template_alias.func2 does not match any function template declaration. Candidates are: template_alias.d(12): template_alias.func2(uint num, uint size)(Foos!(size)) template_alias.d(18): Error: template template_alias.func2(uint num, uint size)(Foos!(size)) cannot deduce template function from argument types !(3)(Foo!(4)[]) template_alias.d(18): Error: template instance func2!(3) errors instantiating template -- Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Nov 06 2013
https://d.puremagic.com/issues/show_bug.cgi?id=11452 Dicebot <public dicebot.lv> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |public dicebot.lv Reduced test case: template Foos(uint SIZE) { alias Foos = int[SIZE]; } void func(uint size)(Foos!size) {} void main() { int[4] foos; func!4(foos); // does compile func(foos); // doesn't compile } -- Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Nov 06 2013
https://d.puremagic.com/issues/show_bug.cgi?id=11452 Simen Kjaeraas <simen.kjaras gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |simen.kjaras gmail.com PST --- I'm not sure this is something we actually do want. Consider: template Foos(uint size, T) { static if (is(T == string)) { alias Foos = T[size*3]; } else { alias Foos = T[size]; } } void func(uint size, T)(Foos!(size, T)) { } void test() { string[6] a; func(a); } How is the poor compiler to figure out the values of size and T? An even simpler example: template Foos(uint size, T) { alias Foos = float; } Bottom line is, templates can be arbitrarily complex. This sort of matching can only be done for very simple cases. -- Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Nov 06 2013