А причем здесь функции-объекты.
Если логика цикла сложная, вот и нужен инвариант.
Примеры -- в разделе 1.9 книжки Вирта Алгоритмы...
Еще полезно там посмотреть поиск делением пополам.
В моем опыте объекты с инвариантом замешиваются в цикл поиска, когда объект является генератором каких-то штук, и эти штуки в какой-то момент заканчиваются.
Можно посмотреть в школьной конфигурации i21eduCompiler -- там проход по тексту с одновременным перекодированием ключевых слов, используется длинный цикл Дейкстры, ну и инвариант есть