The requirements of the iterator are pretty clear: in 24.2.6 [bidirectional iterators], Table 110:
--r (expression) X& (return type) pre: there is s such that r == ++s .
Since there is no such s for c.begin() , it cannot be reduced without violating the precondition.
source share