properly constrain iterator_facade's operators