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