концепт weakly_incrementable, и есть к нему семантические требования:
Let i be an object of type I. When i is in the domain of both pre- and post-increment, i is said to be incrementable. I models weakly_incrementable<I> only if
- The expressions ++i and i++ have the same domain.
- If i is incrementable, then both ++i and i++ advance i to the next element.
- If i is incrementable, then addressof(++i) is equal to addressof(i).
(https://eel.is/c++draft/iterator.concept.winc#14)
Внимание, вопрос: что значит "advance i to the next element"? Что такое next element для инта, который судя по тому, что его задумано пихать в iota_view, является weakly_incrementable?
это очень похоже на требование к итераторам, а не к int-ам
weakly_incrementable это общий концепт, задуманный и для итераторов, и для интов, и для всего на свете
"advance i to the next element" = "укажет на один и тот же следующий элемент"? Т.е. у тебя если на входе i = 3, то i++ и ++i вернут 7 (например), но оба
Это ничего не объясняет. Операторы ++ и определяют, что такое "следующий элемент" для нашего типа. Какая-то циклическая логика
чтобы ++а и а++ переключались в одно и то же состояние (внутреннее хранимое значение)?
следующий incrementable элемент в некой последовательности?,.
Это мне напоминает семантическое требование к equality_comparable про то, что если bool(a == b) == true, то a equals b. Долго пытался понять, что тут значит "equals", если не operator==, и наконец-то понял, что имеется в виду value equality, которую программист сам определяет для каждого типа в своей голове
А если дословно закинуть предложение в YYY.translate, то получим осмысленный перевод IMO: Если i является инкрементируемым, то и ++i, и i++ продвигают i к следующему элементу
Тогда почему не написано именно так, а используется какая-то загадочная формулировка про advance to the next element?
Так, я ищу дискуссии по существу, а не в вопросах перевода английского языка. Понятия "advance" и "next element" нигде в стандарте не определены (либо я не нашёл), хочется понять, как их предполагается интерпретировать
Что такое "последовательность"?
Интересно конечно мнение Антона по этому вопросу услышать. Никто не знает, он любит когда его пингуют посреди дня в субботу?
Нет, не могу успокоится, нужно мнение члена комитета. Была не была, @antoshkka (не стукай пожалуйста). Это ситуация, аналогичная if bool(a == b) == true, then a equals b и каждый программист сам определяет, что такое advance для его типа, так же как и сам определяет equals, или есть всё таки какой-то скрытый смысл?
Упорядоченный набор элементов. Это реально вызывает какие-то проблемы в понимании? Или есть конкретный кейс, в котором это определение неоднозначно?
В стандарте не должно быть размытых формулировок с интуитивными пониманием. Если там что-то написано, то должно строго и однозначно интерпретироваться читателем. Можно по-другому вопрос сформулировать, что изменится, если это требование выкинуть?
"вообще" каждый сам для себя, конечно но есть нюанс: если ты хочешь, чтобы части стандартной библиотеки, использующие == с твоим типом, не ушли в расколбас и не устроили тебе счастливую сессию в отладчике — есть определенные требования: https://en.cppreference.com/w/cpp/concepts/equality_comparable#Semantic_requirements (а также, чтобы коллеги, которые на это напорются, не пришли к тебе с паяльником)
std::equality_comparable<T> is modeled only if, given objects a and b of type T, bool(a == b) is true if and only if a and b are equal.
То есть, в принципе не должно быть слов? Любое словесное определение рано или поздно или зациклится, или закончится на интуитивно-понятных сущностях. Если это требование выкинуть, то либо ++i, либо i++ сможет передвинуть i не на следующий элемент в последовательности.
Вы бы хоть сами свою ссылку прочитали, перед тем как других учить :(
вы хотите чтобы стандарт включал в себя заодно половину толкового словаря?
А вам очевидно определение слова "equals"? Математики уже 200 лет пытаются понять, что оно значит, и все никак 😢
какие буквы в "вообще каждый сам для себя, но есть ограничивающие условия" вам не понятны?
Я прочитал ваше сообщение так, что каждый для себя определяет operator==, а не слово equals. Но даже если наоборот, стандарт требует, чтобы эти понятия совпадали, но не определяет второго из них. Мне кажется, это дефект стандарта, и так писать не следует
Обсуждают сегодня