{"push_id":889412100,"size":1,"distinct_size":1,"ref":"refs/heads/sentinel_predicates","head":"dbadfe457788229179aaf56186c4488f478f304e","before":"20a8594507e8e8c37a852dc3286eb851acc1aba7","commits":[{"sha":"dbadfe457788229179aaf56186c4488f478f304e","author":{"email":"a9e0cb33de19091a5d3e3937702d60c45bbff45e@Carter.net","name":"Casey Carter"},"message":"Re-axiomatize iterators and sentinels.\n* WeakIterators denote elements\n* Sentinel is a relationship between a WeakIterator and a\n  Semiregular type that denote a range.\n* Iterator is a Regular type that is in the Sentinel relationship\n  with itself. (An Iterator is both a WeakIterator and a Sentinel.)\n\nEssentially, sentinels are predicates over iterator values.\nSentinel does not require Common, because == is not a useful\noperation for either weak iterators or sentinels in isolation. That\ndoes not imply they have no common type, or even no meaningful\ncommon type: common_iterator<I, S> is a common type of S and I when\nS and I satisfy Sentinel when restricted to the domain of weak\niterators and sentinels that participate in the same range. Much as\nis the case for counted_iterator, common_iterator<I, S> models\nIterator even when I is weak.\n\nGiven that iterators from different ranges are not required to be\nequality comparable, I don't see there being any benefit to either\nrequiring == for sentinels, or trying to provide a stronger common\ntype than common_iterator for weak iterators and sentinels.\n\nConsequences to the rest of the design are nil. The library simply\ndoes not care if sentinels are EqualityComparable. I've validated\nthis assertion by making it ill-formed to check satisfaction of\nEqualityComparable<T, U>() if T and U are different types that\nsatisfy Sentinel<T, U>() or Sentinel<U, T>().","distinct":true,"url":"https://api.github.com/repos/CaseyCarter/cmcstl2/commits/dbadfe457788229179aaf56186c4488f478f304e"}]}