В некоторых языках программирования есть понятие контейнера. Это такой черный ящик, в котором лежат вещи. У контейнера обычно можно спросить, сколько вещей в нем лежит, и ответом будет натуральное число, т. е. целое число без знака: ноль или больше.
Вещи обычно можно сравнивать с другими вещами (того же или похожего типа) на предмет, равны (похожи) они или нет. В некоторых языках программирования для удобства программистов сделана функция, которой можно указать на контейнер, на некую вещь, и она сосчитает, сколько в контейнере есть вещей, равных данной (похожих на данную).
Иногда возникает необходимость выяснить, все ли вещи в контейнере одинаковые/похожие. Для этого логично сравнить количество вещей в контейнере с количеством вещей, равных/похожих на первую из них.
И тут в кое-каком языке программирования возникает неувязочка. По причинам теоретически-исторического характера функция, считающая, сколько в контейнере вещей, похожих на данную, возвращает не натуральное число, а целое со знаком, которое, конечно же, никогда не меньше нуля, но компилятор этого не знает и предупреждает при сравнении всё равно. Нормальные программисты на это предупреждение, конечно же, забивают, но люди, заведующие тем, чтобы всё было аккуратненько, хотят, чтобы предупреждений от компилятора не было совсем.
Сколько человеко-лет было убито на разбирательства, почему это так - бог весть; я не удивлюсь, если это суммарное время окажется больше, чем суммарный возраст всех членов комитета по стандартизации этого языка.
Если они штатские такие умные, почему не придумали iterator trait для абсолютного значения разницы между двумя итераторами? Суки злобные.