https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116976
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> --- Adding something like this to _Bit_iterator (and _Bit_const_iterator) allows calling flip(): struct _Pointer { reference _M_ref; const _Pointer* operator->() const { return this; } void flip() const { *_M_ref._M_p ^= _M_ref._M_mask; } }; _Pointer operator->() const { return _Pointer{{_M_p, 1UL << _M_offset}}; } It wouldn't support vb.begin()->operator bool() nor vb.begin()->vector<bool>::reference::flip() But I'm OK with that.