On 08/04/2019 11:12 AM, matheus wrote:
Hi,

The snippet below will produce an "infinite loop" because obviously "ubyte u" will overflow after 255:

import std.stdio;
void main(){
     ubyte u = 250;
     for(;u<256;++u){
         writeln(u);
     }
}

Question: Is there a way (Flag) to prevent this?

Matheus.

Two examples with foreach and ranges. The 'ubyte.max + 1' expression is int. The compiler casts to ubyte (because we typed ubyte) in the foreach and we cast to ubyte in the range:

void main() {
  int count = 0;
  // (Explicit request for) implicit conversion to ubyte
  foreach (ubyte u; ubyte.min .. ubyte.max + 1) {
    ++count;
  }
  assert(count == 256);

  import std.range;
  import std.algorithm;
  import std.conv;
  int count2 = 0;
  // Explicit conversion with to!ubyte
  iota(ubyte.max + 1).map!(to!ubyte).each!(_ => ++count2);
  assert(count2 == 256);
}

Ali

Reply via email to