digitalmars.D.bugs - [Issue 617] New: IFTI doesn't use normal promotion rules for non-template parameters
- d-bugmail puremagic.com (42/42) Nov 28 2006 http://d.puremagic.com/issues/show_bug.cgi?id=617
- Thomas Kuehne (13/42) Nov 29 2006 -----BEGIN PGP SIGNED MESSAGE-----
- d-bugmail puremagic.com (8/15) Nov 29 2006 http://d.puremagic.com/issues/show_bug.cgi?id=617
- d-bugmail puremagic.com (8/8) Apr 27 2007 http://d.puremagic.com/issues/show_bug.cgi?id=617
- d-bugmail puremagic.com (13/13) Jan 22 2008 http://d.puremagic.com/issues/show_bug.cgi?id=617
- d-bugmail puremagic.com (9/9) Jul 09 2008 http://d.puremagic.com/issues/show_bug.cgi?id=617
http://d.puremagic.com/issues/show_bug.cgi?id=617 Summary: IFTI doesn't use normal promotion rules for non-template parameters Product: D Version: 0.175 Platform: PC OS/Version: Windows Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: bugzilla digitalmars.com ReportedBy: wbaxter gmail.com For regular function matching, an int argument can be automatically converted to a size_t. But if IFTI is in play, then the difference between int and size_t in the function's parameter list causes IFTI to fail to find a match. ------- import std.stdio : writefln; void simple_func(char[] s, size_t i) { writefln(s, i); } void simple_func_t(T)(T s, size_t i) { writefln(s, i); } void main(char[][] args) { // ok as basic function simple_func(args[0], 3); // ok with explicit type simple_func_t!(char[])(args[0], 3); // ok with exact match on non-template param simple_func_t!(char[])(args[0], 3u); // Fails to to match with IFTI: // "template template_deduction.simple_func_t(T) does not // match any template declaration // template template_deduction.simple_func_t(T) cannot // deduce template function from argument types (char[],int)" simple_func_t(args[0], 3); } --
Nov 28 2006
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 d-bugmail puremagic.com schrieb am 2006-11-28:http://d.puremagic.com/issues/show_bug.cgi?id=617For regular function matching, an int argument can be automatically converted to a size_t. But if IFTI is in play, then the difference between int and size_t in the function's parameter list causes IFTI to fail to find a match. ------- import std.stdio : writefln; void simple_func(char[] s, size_t i) { writefln(s, i); } void simple_func_t(T)(T s, size_t i) { writefln(s, i); } void main(char[][] args) { // ok as basic function simple_func(args[0], 3); // ok with explicit type simple_func_t!(char[])(args[0], 3); // ok with exact match on non-template param simple_func_t!(char[])(args[0], 3u); // Fails to to match with IFTI: // "template template_deduction.simple_func_t(T) does not // match any template declaration // template template_deduction.simple_func_t(T) cannot // deduce template function from argument types (char[],int)" simple_func_t(args[0], 3); }Added to DStress as http://dstress.kuehne.cn/run/t/template_49_A.d http://dstress.kuehne.cn/run/t/template_49_B.d http://dstress.kuehne.cn/run/t/template_49_C.d Thomas -----BEGIN PGP SIGNATURE----- iD8DBQFFbf+NLK5blCcjpWoRAsoKAJ4k/a8BP67hinQp3+Ae82LZEuIQsgCeKqwZ /AJVkA45XnK8ddpPf1M0BPY= =4yoq -----END PGP SIGNATURE-----
Nov 29 2006
http://d.puremagic.com/issues/show_bug.cgi?id=617// ok with exact match on non-template param simple_func_t!(char[])(args[0], 3u);Added to DStress as http://dstress.kuehne.cn/run/t/template_49_A.d http://dstress.kuehne.cn/run/t/template_49_B.d http://dstress.kuehne.cn/run/t/template_49_C.dOops the line above is supposed to be *without* the explicit template arg: // ok with exact match on non-template param simple_func_t(args[0], 3u); But it doesn't look like that will affect your dstress tests. --
Nov 29 2006
http://d.puremagic.com/issues/show_bug.cgi?id=617 thomas-dloop kuehne.cn changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |leo.dahlmann gmail.com *** Bug 1178 has been marked as a duplicate of this bug. *** --
Apr 27 2007
http://d.puremagic.com/issues/show_bug.cgi?id=617 larsivar igesund.net changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |larsivar igesund.net Just noting that this bug (when propagated to GDC), means that code that should be portable to 64 bit targets isn't, and requires casts as a workaround. Examples include foo(cast(size_t)3) instead of foo(3u). --
Jan 22 2008
http://d.puremagic.com/issues/show_bug.cgi?id=617 bugzilla digitalmars.com changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |FIXED Fixed dmd 1.032 and 2.016 --
Jul 09 2008