Что реализация может сделать с семантическими требованиями к концепциям?C++

Программы на 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.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»