Попробуй, как я мог, самый близкий ответ, который я видел, this, с двумя полностью противоположными ответами (!)
Вопрос прост, является ли это законным?
auto p = reinterpret_cast<int*>(0xbadface);
*p; // legal?
Мое отношение к делу
- Кастинг целых чисел с указателем: никаких ограничений на то, что может быть выполнено
- Indirection: только заявляет, что результат равен lvalue.
- Lifetimes: указывает только то, что нельзя сделать на объектах, здесь нет объекта
- Операторы выражения:
*p
- это отброшенное выражение - Отброшенные выражения значений: преобразование lvalue-to-rval не выполняется
- Undefined -ness lvalues : aka строгое правило сглаживания, только если lvalue преобразуется в rvalue
Итак, я пришел к выводу, что нет ничего явно, говоря, что это поведение undefined. Тем не менее я отчетливо помню, что некоторые платформы ловушки на косвенные ссылки для недействительных указателей. Что пошло не так с моими рассуждениями?