Tricky semantics of ranges & potentially numerous Phobos bugs

Era Scarecrow rtcvb32 at yahoo.com
Tue Oct 16 15:27:08 PDT 2012


On Tuesday, 16 October 2012 at 17:06:06 UTC, Jonathan M Davis 
wrote:
> There's also no way to validate that front always returns the 
> same value, or that popFront actually pops a value, or that it 
> pops only one value, etc. Pretty much _all_ that we can verify 
> with template constraints is function signatures. So, we can 
> _never_ fully restrict range types to exactly what would be 
> considered correct.

  An option that may be decided on, is if an enum is used to 
specify certain behavior decisions made by the programmer, then 
only a few new templates to check for those and return true when 
those are specifically true. Perhaps an example to use?


  enum RangeTypes { normal, mutating, popDisgarded, ... }


  template isRangeMutating(T)
  if (hasMember!(T, "rangeType")) {
    enum isRangeMutating = T.rangeType == RangeType.mutating;
  }


//function that cannot accept input range that mutates any 
members due to
//popFront/popBack
void something(I)(I input)
if (isInputRange!(I) && (!isRangeMutating!(I)))
{ /*...*/ }


More information about the Digitalmars-d mailing list