[container.requirements] указывает, что для Контейнер тип X , X::difference_type
и X::size_type
имеют целое число без знака типы (определяется как [basic.fundamental] / 2 ).То же самое касается различий итераторов .
По каким причинам им не разрешено быть типом перечисления или любым типом объекта?
Редактировать: Конечно, приведенные выше типы должны удовлетворять некоторым необходимым требованиям, например, поддерживать некоторые арифметические операции.Я не ожидаю, что X::size_type
определено как struct Empty {};
без операторов.
Моя мотивация состоит в том, что я хочу определить X::size_type
и X::difference_type
как определяемые пользователем типы, чьи определенные операторы образуютаффинное пространство и поэтому отличаются от операторов, определенных для встроенных целочисленных типов.(Аффинные пробелы означают, что я определяю только те операции, которые имеют математический смысл для типов и уменьшают общие ошибки, см. Пример здесь .)
Примечание: этот вопрос не о подписанных и неподписанных.Я знаю об этом: Может ли использование неподписанного, а не подписанного int вызывать ошибки?Почему?
Один из возможных ответов, который я могу придумать, заключается в том, что пользователи могут захотеть использовать типы в качестве параметров шаблонных типов, но это все равно может работать с типами перечисления.
Редактировать : Другой возможный ответ, возможно, заключается в том, что «необходимые требования» в моем редакторе выше просто еще не определены, и было проще перейти к тому, что уже существует в стандарте.