On 3/26/2014 11:53 PM, Rainer Schuetze wrote:
 This caching range example:

///////////////////////////////////
T getc(T)();

struct irange(T)
{
   bool _cached;
   T _cache;

   this(T[] arr) { _cached = false; }
   bool empty() {
     if(_cached) return false;
     _cache = getc!T();
     return (_cache < 0);

What happens if empty is called twice in a row? Two characters get read! That isn't right.

   }
   T front() { empty(); return _cache; }

What happens if empty returns true? EOF? I don't think that's intuitive. You could have front throw, but that prevents anyone from building nothrow ranges.

   void popFront() { _cached = false; }
}

Reply via email to