Expected or Bug? struct range unmodified after foreach

Timon Gehr timon.gehr at gmx.ch
Mon Nov 7 09:52:19 PST 2011


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.
}






More information about the Digitalmars-d-learn mailing list