Что реализация может сделать с семантическими требованиями к концепциям? ⇐ C++
-
Гость
Что реализация может сделать с семантическими требованиями к концепциям?
Я не понимаю, какова цель и значение семантических требований к понятиям. Например, [iterator.concept.contigious] p2 перечисляет ряд семантических требований для концепции std::contigious_iterator. Помимо других требований, to_address(a) == Addressof(*a) должен быть истинным для итератора a.
Они не входят в определение в первом абзаце:
шаблон концепция contigious_iterator = случайный_access_iterator && производный_из && is_lvalue_reference_v && Same_as && требуется (const I& i) { { to_address(i) } -> Same_as; }; Что именно реализация может сделать с этими дополнительными семантическими ограничениями? Что, если концепция ошибочно кажется удовлетворенной, хотя семантические требования не выполняются?
Например, предположим, что у меня есть итератор T, который соответствует всем требованиям концепции std::contigious_iterator в первом абзаце, но не соответствует семантическим ограничениям. Является ли std::contiguos_iterator гарантированно равным true? Разрешено ли реализации диагностировать эти дополнительные требования и делать std::contigious_iterator false? Является ли неопределенным или неопределенным поведением полагаться на то, что std::contigious_iterator является true?
Примечание: существует множество других подобных требований. Например, std::strict_weak_order добавляет чисто семантические требования поверх std::relation, а std::regular_invocable добавляет чисто семантические требования к начало std::invocable.
Я не понимаю, какова цель и значение семантических требований к понятиям. Например, [iterator.concept.contigious] p2 перечисляет ряд семантических требований для концепции std::contigious_iterator. Помимо других требований, to_address(a) == Addressof(*a) должен быть истинным для итератора a.
Они не входят в определение в первом абзаце:
шаблон концепция contigious_iterator = случайный_access_iterator && производный_из && is_lvalue_reference_v && Same_as && требуется (const I& i) { { to_address(i) } -> Same_as; }; Что именно реализация может сделать с этими дополнительными семантическими ограничениями? Что, если концепция ошибочно кажется удовлетворенной, хотя семантические требования не выполняются?
Например, предположим, что у меня есть итератор T, который соответствует всем требованиям концепции std::contigious_iterator в первом абзаце, но не соответствует семантическим ограничениям. Является ли std::contiguos_iterator гарантированно равным true? Разрешено ли реализации диагностировать эти дополнительные требования и делать std::contigious_iterator false? Является ли неопределенным или неопределенным поведением полагаться на то, что std::contigious_iterator является true?
Примечание: существует множество других подобных требований. Например, std::strict_weak_order добавляет чисто семантические требования поверх std::relation, а std::regular_invocable добавляет чисто семантические требования к начало std::invocable.
Мобильная версия