Thread overview | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
|
August 27, 2013 [Issue 10909] New: std.conv.to!(bool)(int): conversion from integer to bool | ||||
---|---|---|---|---|
| ||||
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 --- Comment #0 from growlercab@gmail.com 2013-08-26 22:46:03 PDT --- 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: ------- |
August 27, 2013 [Issue 10909] std.conv.to!(bool)(int): conversion from integer to bool | ||||
---|---|---|---|---|
| ||||
Posted in reply to growlercab@gmail.com | http://d.puremagic.com/issues/show_bug.cgi?id=10909 monarchdodra@gmail.com changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |monarchdodra@gmail.com --- Comment #1 from monarchdodra@gmail.com 2013-08-26 23:10:15 PDT --- 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: ------- |
August 27, 2013 [Issue 10909] std.conv.to!(bool)(int): conversion from integer to bool | ||||
---|---|---|---|---|
| ||||
Posted in reply to growlercab@gmail.com | http://d.puremagic.com/issues/show_bug.cgi?id=10909 --- Comment #2 from growlercab@gmail.com 2013-08-26 23:31:00 PDT --- (In reply to comment #1) > 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. 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: ------- |
August 27, 2013 [Issue 10909] std.conv.to!(bool)(int): conversion from integer to bool | ||||
---|---|---|---|---|
| ||||
Posted in reply to growlercab@gmail.com | http://d.puremagic.com/issues/show_bug.cgi?id=10909 --- Comment #3 from monarchdodra@gmail.com 2013-08-27 00:13:46 PDT --- 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: ------- |
August 27, 2013 [Issue 10909] std.conv.to!(bool)(int): conversion from integer to bool | ||||
---|---|---|---|---|
| ||||
Posted in reply to growlercab@gmail.com | http://d.puremagic.com/issues/show_bug.cgi?id=10909 --- Comment #4 from growlercab@gmail.com 2013-08-27 04:26:05 PDT --- (In reply to comment #3) > 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 -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
August 27, 2013 [Issue 10909] std.conv.to!(bool)(int): conversion from integer to bool | ||||
---|---|---|---|---|
| ||||
Posted in reply to growlercab@gmail.com | http://d.puremagic.com/issues/show_bug.cgi?id=10909 --- Comment #5 from growlercab@gmail.com 2013-08-27 04:29:06 PDT --- (In reply to comment #4) > (In reply to comment #3) > > 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 Thanks for the help monarch_dodra! -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
September 04, 2013 [Issue 10909] std.conv.to!(bool)(int): conversion from integer to bool | ||||
---|---|---|---|---|
| ||||
Posted in reply to growlercab@gmail.com | http://d.puremagic.com/issues/show_bug.cgi?id=10909 --- Comment #6 from github-bugzilla@puremagic.com 2013-09-04 07:57:28 PDT --- 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 Merge pull request #1525 from lyrebirdsw/issue_10909 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: ------- |
September 04, 2013 [Issue 10909] std.conv.to!(bool)(int): conversion from integer to bool | ||||
---|---|---|---|---|
| ||||
Posted in reply to growlercab@gmail.com | http://d.puremagic.com/issues/show_bug.cgi?id=10909 hsteoh@quickfur.ath.cx changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |FIXED --- Comment #7 from hsteoh@quickfur.ath.cx 2013-09-04 08:12:30 PDT --- Verified fixed in git HEAD (second version of code, in comment #2). The first version still throws, as explained in comment #1. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
Copyright © 1999-2021 by the D Language Foundation