А причем здесь функции-объекты.

Если логика цикла сложная, вот и нужен инвариант.

Примеры -- в разделе 1.9 книжки Вирта Алгоритмы...
Еще полезно там посмотреть поиск делением пополам.

В моем опыте объекты с инвариантом замешиваются в цикл поиска, когда объект является генератором каких-то штук, и эти штуки в какой-то момент заканчиваются.

Можно посмотреть в школьной конфигурации i21eduCompiler -- там проход по тексту с одновременным перекодированием ключевых слов, используется длинный цикл Дейкстры, ну и инвариант есть