В большинстве случаев итераторы STL являются CopyConstructable, потому что некоторые алгоритмы STL требуют этого для повышения производительности, например std::sort.
Тем не менее, я работал над домашним проектом, чтобы обернуть API FindXFile (о котором уже спрашивали), но проблема в том, что вокруг этого API невозможно реализовать копируемый итератор. Дескриптор поиска ни в коем случае нельзя дублировать — DuplicateHandle специально запрещает передавать ему такие типы дескрипторов. И если вы просто поддерживаете счетчик ссылок на дескриптор поиска, то однократное приращение любой копии приводит к приращению всех копий - ясно, что это не то, что должен делать итератор, созданный копией.
Поскольку здесь я не могу удовлетворить традиционные требования к конструктивному копированию итераторов, стоит ли вообще пытаться создать итератор в стиле STL? С одной стороны, создание какого-либо другого метода перечисления не будет подпадать под обычные соглашения STL, но, с другой стороны, следующие соглашения STL будут сбивать с толку пользователей этого итератора, если они попытаются скопировать его позже.
Что меньшее из двух зол?