Документирование преобразования «неверное значение указателя» в реализациях C ++
Согласно стандарту C ++, для каждой реализации обязательно задокументировать «поведение, определяемое реализацией»:
1.3.11[defns.impl.defined]
поведение, определяемое реализацией
поведение, для правильно сформированной программы построить и исправить данные, которые зависят от реализации и что каждая реализация документирует
А чтение неверного значения указателя имеет поведение, определяемое реализацией (см. 4.1. Преобразование Lvalue-в-значение[conv.lval]
):
если объект, на который ссылается glvalue, содержит недопустимое значение указателя (3.7.4.2, 3.7.4.3), поведение определяется реализацией.
(цитата из черновика n4527, но многословно, что «Переадресация через недопустимое значение указателя и передача недопустимого значения указателя в функцию освобождения имеет неопределенное поведение. Любое другое использование недопустимого значения указателя имеет поведение, определяемое реализацией.» было в 3.7. 4.2 Распределение функций[basic.stc.dynamic.deallocation]
так как хотя бы проект n3485)
Однако многие популярные реализации не определяют это поведение, и многие эксперты описывают это как «неопределенное поведение».
Вероятная причина пропуска четкой документации заключается в том, что, насколько я могу судить, оценка «недопустимых значений указателя» отсутствует в «Индексе поведения, определяемого реализацией», который появляется в черновиках стандарта после приложений.
Является ли это дефектом в стандарте, и существуют ли какие-либо открытые отчеты о дефектах или действия комитета, принятые после C ++ 14 в отношении этого?