digitalmars.D.bugs - [Issue 10909] New: std.conv.to!(bool)(int): conversion from integer to bool
- d-bugmail puremagic.com (37/37) Aug 26 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10909
- d-bugmail puremagic.com (14/14) Aug 26 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10909
- d-bugmail puremagic.com (21/28) Aug 26 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10909
- d-bugmail puremagic.com (28/28) Aug 27 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10909
- d-bugmail puremagic.com (11/41) Aug 27 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10909
- d-bugmail puremagic.com (7/46) Aug 27 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10909
- d-bugmail puremagic.com (13/13) Sep 04 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10909
- d-bugmail puremagic.com (12/12) Sep 04 2013 http://d.puremagic.com/issues/show_bug.cgi?id=10909
http://d.puremagic.com/issues/show_bug.cgi?id=10909 Summary: std.conv.to!(bool)(int): conversion from integer to bool Product: D Version: unspecified Platform: All OS/Version: All Status: NEW Severity: enhancement Priority: P2 Component: Phobos AssignedTo: nobody puremagic.com ReportedBy: growlercab gmail.com Improve std.conv.to!bool(int) to convert from integer to bool. Compiling 0.to!bool gives the following compiler error: Error: template std.conv.toImpl cannot deduce template function from argument types !(bool)(int) I would expected the following snippet to compile and throw no assertions... --- import std.conv; void main() { assert(0.to!bool == false); assert(1.to!bool == true); int ival = 1; assert(ival.to!bool == true); ival = 0; assert(ival.to!bool == false); // Could follow C++ implicit conversion rules perhaps? // Where non-zero == true ival = 55; assert(ival.to!bool == true); } --- -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Aug 26 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10909 monarchdodra gmail.com changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |monarchdodra gmail.com The current semantics of "to!X" means that there is range validation. This means that something such as: "to!bool(55)" *should* trigger an overflow exception. This might sound inconvenient at first, but on the other hand, if it didn't, than to would just be a glorified cast to bool. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Aug 26 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10909The current semantics of "to!X" means that there is range validation. This means that something such as: "to!bool(55)" *should* trigger an overflow exception. This might sound inconvenient at first, but on the other hand, if it didn't, than to would just be a glorified cast to bool.Good point, range checking should be in place so ignore that last part of the code. If this is implemented then the following should work: --- import std.conv; void main() { assert(0.to!bool == false); assert(1.to!bool == true); int ival = 1; assert(ival.to!bool == true); ival = 0; assert(ival.to!bool == false); } --- Thanks, G. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Aug 26 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10909 The fix is pretty trivial, bools where not supported for the simple fact that they are not on the "support" list. The fix is: 1. std.conv: Line 1309 Change: T toImpl(T, S)(S value) if (!isImplicitlyConvertible!(S, T) && (isNumeric!S || isSomeChar!S) && (isNumeric!T || isSomeChar!T) && !is(T == enum)) To: T toImpl(T, S)(S value) if (!isImplicitlyConvertible!(S, T) && (isNumeric!S || isSomeChar!S || isBoolean!S) && (isNumeric!T || isSomeChar!T || isBoolean!T) && !is(T == enum)) 2. Traits: Line 5691 Change: template mostNegative(T) if(isNumeric!T || isSomeChar!T) To: template mostNegative(T) if(isNumeric!T || isSomeChar!T || isBoolean!T) I don't have time to fix this myself right now, but if someone else does it, and writes the corresponding unittests, I'd be glad to review it. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Aug 27 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10909The fix is pretty trivial, bools where not supported for the simple fact that they are not on the "support" list. The fix is: 1. std.conv: Line 1309 Change: T toImpl(T, S)(S value) if (!isImplicitlyConvertible!(S, T) && (isNumeric!S || isSomeChar!S) && (isNumeric!T || isSomeChar!T) && !is(T == enum)) To: T toImpl(T, S)(S value) if (!isImplicitlyConvertible!(S, T) && (isNumeric!S || isSomeChar!S || isBoolean!S) && (isNumeric!T || isSomeChar!T || isBoolean!T) && !is(T == enum)) 2. Traits: Line 5691 Change: template mostNegative(T) if(isNumeric!T || isSomeChar!T) To: template mostNegative(T) if(isNumeric!T || isSomeChar!T || isBoolean!T) I don't have time to fix this myself right now, but if someone else does it, and writes the corresponding unittests, I'd be glad to review it.https://github.com/D-Programming-Language/phobos/pull/1525 OK, I had a go at this. It is my first D contribution so hopefully I did everything correctly. Cheers, G -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Aug 27 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10909Thanks for the help monarch_dodra! -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------The fix is pretty trivial, bools where not supported for the simple fact that they are not on the "support" list. The fix is: 1. std.conv: Line 1309 Change: T toImpl(T, S)(S value) if (!isImplicitlyConvertible!(S, T) && (isNumeric!S || isSomeChar!S) && (isNumeric!T || isSomeChar!T) && !is(T == enum)) To: T toImpl(T, S)(S value) if (!isImplicitlyConvertible!(S, T) && (isNumeric!S || isSomeChar!S || isBoolean!S) && (isNumeric!T || isSomeChar!T || isBoolean!T) && !is(T == enum)) 2. Traits: Line 5691 Change: template mostNegative(T) if(isNumeric!T || isSomeChar!T) To: template mostNegative(T) if(isNumeric!T || isSomeChar!T || isBoolean!T) I don't have time to fix this myself right now, but if someone else does it, and writes the corresponding unittests, I'd be glad to review it.https://github.com/D-Programming-Language/phobos/pull/1525 OK, I had a go at this. It is my first D contribution so hopefully I did everything correctly. Cheers, G
Aug 27 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10909 Commits pushed to master at https://github.com/D-Programming-Language/phobos https://github.com/D-Programming-Language/phobos/commit/dcb634e8a27c9d732e3b30d56051ad1257f198a7 issue 10909 toImpl support for bool narrowing conversion. mostNegative support for bool. https://github.com/D-Programming-Language/phobos/commit/b001c0a7866887a0fcdc12a1e5780dfe0b2e9dd8 issue 10909 toImpl narrowing conversion support for bool type. mostNegative support for bool type -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Sep 04 2013
http://d.puremagic.com/issues/show_bug.cgi?id=10909 hsteoh quickfur.ath.cx changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |FIXED -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Sep 04 2013