Thread overview | |||||
---|---|---|---|---|---|
|
November 06, 2011 Expected or Bug? struct range unmodified after foreach | ||||
---|---|---|---|---|
| ||||
I'm sure if this was changed there would be other interesting behavior, such as arrays being consumed. And suggestions other than for(S s; !s.empty, s.popFront())... Example: void main() { S s; foreach(i; s) { assert(i == s.popCount); // Fail } assert(s.popCount == 10); // Fail } struct S { size_t popCount; auto empty() { if(popCount > 9) return true; return false; } auto front() { return popCount; } auto popFront() { popCount++; } } |
November 07, 2011 Re: Expected or Bug? struct range unmodified after foreach | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jesse Phillips | On 11/07/2011 12:26 AM, Jesse Phillips wrote:
> I'm sure if this was changed there would be other interesting behavior,
> such as arrays being consumed. And suggestions other than
>
> for(S s; !s.empty, s.popFront())...
>
> Example:
>
> void main() {
> S s;
>
> foreach(i; s) {
> assert(i == s.popCount); // Fail
> }
>
> assert(s.popCount == 10); // Fail
> }
>
> struct S {
> size_t popCount;
>
> auto empty() {
> if(popCount> 9)
> return true;
> return false;
> }
> auto front() { return popCount; }
> auto popFront() {
> popCount++;
> }
> }
Expected, s has value semantics.
for(S _s=s; !_s.empty(); _s.popFront()){
auto i = _s.front();
// assert(i == s.popCount()); // expected to fail.
}
|
November 08, 2011 Re: Expected or Bug? struct range unmodified after foreach | ||||
---|---|---|---|---|
| ||||
Posted in reply to Timon Gehr | On Mon, 07 Nov 2011 18:52:19 +0100, Timon Gehr wrote:
> Expected, s has value semantics.
>
> for(S _s=s; !_s.empty(); _s.popFront()){
> auto i = _s.front();
> // assert(i == s.popCount()); // expected to fail.
> }
Yes thank you. I was just hoping to have access to _s inside the loop.
And yeah, it likely would break lots of code. Granted I kind of wish all ranges would be consumed unless specifying save().
|
Copyright © 1999-2021 by the D Language Foundation