Страницы

Поиск по вопросам

среда, 10 октября 2018 г.

Как заставить работать constexpr с указателем на -1?

Нужен указатель на адрес 0xFFFF FFFF FFFF FFFF, или на -1. Пытаюсь определить как constexpr auto hInvd = reinterpret_cast(-1ul);, но вываливается ошибка, что это не константное выражение. Очевидно из-за reinterpret_cast. К сожалению, другие *_cast тоже не дают ничего полезного. Простой const работает без проблем const auto hInvd=reinterpret_cast(-1ul); Мне нужен указатель на область памяти, которая будет свободна. nullptr для этого не годится, так как нулевой адрес может быть использован, а вот вероятность использования адреса 0xFFFFFFFFFFFFFFFF практически равна нулю.


Ответ

Конвертировать любую целочисленную константу в указатель на constexpr невозможно, т.к. для этого используется reinterpet_cast, который прямо запрещён в описании константных выражений ([expr.const]).
Почему так? Потому что constexpr всегда является чем-то определённым и не может дать на выходе неопределённое поведение. Если бы можно было случайный адрес привести к указателю на constexpr, тогда получилось бы, что его использование (разыменовывание) может приводить к UB.

Комментариев нет:

Отправить комментарий