toChars Bug?
Greetings This small code snippet works: // import std.conv; import std.stdio; void main() { writeln(toChars!10(45)); } But if I change toChars!10 with toChars!2, I get: /tmp/test.d(6): Error: template std.conv.toChars cannot deduce function from argument types !(2)(int), candidates are: [snip]std/conv.d(6020):std.conv.toChars(ubyte radix = 10, Char = char, LetterCase letterCase = LetterCase.lower, T)(T value) if ((radix == 2 || radix == 8 || radix == 10 || radix == 16) && (is(Unqual!T == uint) || is(Unqual!T == ulong) || radix == 10 && (is(Unqual!T == int) || is(Unqual!T == long toChars!8 and toChars!16 do not work either.
Re: toChars Bug?
see documentation: http://dpldocs.info/experimental-docs/std.conv.toChars.html "...Can be uint or ulong. If radix is 10, can also be int or long." 45 is int, not uint. so no radices except `10` will work.
Re: toChars Bug?
On Tuesday, 12 December 2017 at 12:49:32 UTC, ketmar wrote: see documentation: http://dpldocs.info/experimental-docs/std.conv.toChars.html "...Can be uint or ulong. If radix is 10, can also be int or long." 45 is int, not uint. so no radices except `10` will work. I think it would be possible to alter toChars such that it had a set of overloads, such that value range propagation would allow an implicit conversion here.
Re: toChars Bug?
p.s.: but no, i am wrong. foo(-42); this is perfectly valid for `foo (uint n)`, as D converts negative ints to uints without any warnings. so no, overloads won't fit.
Re: toChars Bug?
John Colvin wrote: On Tuesday, 12 December 2017 at 12:49:32 UTC, ketmar wrote: see documentation: http://dpldocs.info/experimental-docs/std.conv.toChars.html "...Can be uint or ulong. If radix is 10, can also be int or long." 45 is int, not uint. so no radices except `10` will work. I think it would be possible to alter toChars such that it had a set of overloads, such that value range propagation would allow an implicit conversion here. yeah, i think that overloads with explicit `uint` and `ulong` args should take care of that.
Re: toChars Bug?
On Tuesday, 12 December 2017 at 15:19:48 UTC, ketmar wrote: p.s.: but no, i am wrong. foo(-42); this is perfectly valid for `foo (uint n)`, as D converts negative ints to uints without any warnings. so no, overloads won't fit. hmm yes, it seems it is not possible.
Re: toChars Bug?
On 12/12/17 7:49 AM, ketmar wrote: see documentation: http://dpldocs.info/experimental-docs/std.conv.toChars.html "...Can be uint or ulong. If radix is 10, can also be int or long." 45 is int, not uint. so no radices except `10` will work. So, the answer is: toChars!2(45u); BTW, I find this limitation is a bad code smell. IFTI needs some design thought on how to deal with literals. -Steve