Re: std.algorithm.among

2014-07-14 Thread bearophile via Digitalmars-d-learn
Ola Fosheim Grøstad: On Sunday, 13 July 2014 at 20:55:25 UTC, bearophile wrote: D doesn't carry the range of mutable variables across different expressions. What is the reasoning behind this kind of special-casing? Compiler simplicity and to avoid flow analysis. The value range is kept acr

Re: std.algorithm.among

2014-07-13 Thread via Digitalmars-d-learn
On Sunday, 13 July 2014 at 20:55:25 UTC, bearophile wrote: D doesn't carry the range of mutable variables across different expressions. What is the reasoning behind this kind of special-casing?

Re: std.algorithm.among

2014-07-13 Thread bearophile via Digitalmars-d-learn
Meta: It seems that not even that is the case. void main() { uint n = 0; //Error bool b = n; } D doesn't carry the range of mutable variables across different expressions. So write (with the 2.066beta3): void main() { const uint x1 = 0; const uint x2 = 1;

Re: std.algorithm.among

2014-07-13 Thread Meta via Digitalmars-d-learn
On Sunday, 13 July 2014 at 19:06:29 UTC, Timon Gehr wrote: On 07/13/2014 08:51 PM, Meta wrote: That's weird, I always assumed this worked. Was it always the case that numeric types can't be implicitly casted to bool? Yes, unless their range fits into [0,2). It seems that not even that is

Re: std.algorithm.among

2014-07-13 Thread Timon Gehr via Digitalmars-d-learn
On 07/13/2014 08:51 PM, Meta wrote: That's weird, I always assumed this worked. Was it always the case that numeric types can't be implicitly casted to bool? Yes, unless their range fits into [0,2).

Re: std.algorithm.among

2014-07-13 Thread Meta via Digitalmars-d-learn
On Sunday, 13 July 2014 at 11:18:05 UTC, bearophile wrote: The idea of not making std.algorithm.among!() a predicate was not so good: void main() { import std.stdio, std.algorithm; auto s = "hello how\nare you"; s.until!(c => c.among!('\n', '\r')).

Re: std.algorithm.among

2014-07-13 Thread bearophile via Digitalmars-d-learn
Timon Gehr: I am saying the following code implementing 'until' in std.algorithm is at fault: private bool predSatisfied() // <-- don't say bool here { static if (is(Sentinel == void)) return unaryFun!pred(_input.front); // or cast here else retu

Re: std.algorithm.among

2014-07-13 Thread Timon Gehr via Digitalmars-d-learn
On 07/13/2014 03:09 PM, bearophile wrote: Timon Gehr: It works with filter, so I think it should just work with until as well. So do you suggest me to open a bug report where I ask "among" to return a bool, or do you suggest to ask for an enhancement of "until", or what? Bye, bearophile I

Re: std.algorithm.among

2014-07-13 Thread bearophile via Digitalmars-d-learn
Timon Gehr: It works with filter, so I think it should just work with until as well. So do you suggest me to open a bug report where I ask "among" to return a bool, or do you suggest to ask for an enhancement of "until", or what? Bye, bearophile

Re: std.algorithm.among

2014-07-13 Thread Timon Gehr via Digitalmars-d-learn
On 07/13/2014 01:18 PM, bearophile wrote: The idea of not making std.algorithm.among!() a predicate was not so good: ... Agreed. void main() { import std.stdio, std.algorithm; auto s = "hello how\nare you"; s.until!(c => c.among!('\n', '\r')).

Re: std.algorithm.among

2014-07-13 Thread sigod via Digitalmars-d-learn
On Sunday, 13 July 2014 at 11:18:05 UTC, bearophile wrote: The idea of not making std.algorithm.among!() a predicate was not so good: void main() { import std.stdio, std.algorithm; auto s = "hello how\nare you"; s.until!(c => c.among!('\n', '\r')).

std.algorithm.among

2014-07-13 Thread bearophile via Digitalmars-d-learn
The idea of not making std.algorithm.among!() a predicate was not so good: void main() { import std.stdio, std.algorithm; auto s = "hello how\nare you"; s.until!(c => c.among!('\n', '\r')).writeln; } (A normal workaround is to use !!c.among!). Bye, bearophile