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)))
{ /*...*/ }

Reply via email to