Особая проблема, с которой столкнулся пользователь, заключается в том, что существует некоторая непоследовательность в том, как компиляторы справляются с этим.
Например, этот код (https://godbolt.org/z/08Z-zi):
constexpr auto value = 1;
static_assert(*const_cast<int *>(&value), "value should be 1");
прекрасно компилируется с GCC, Clang и MSVC, но завершается неудачно с Intel C ++ Compiler 19.0.1 со следующей ошибкой:
error: expression must have a constant value
static_assert(*const_cast<int *>(&value), "value should be 1");
Насколько я могу судить, в стандарте прямо не указывается, что const_cast
недопустимо в константном выражении. Запись через результирующий указатель будет неопределенной и поэтому недопустимой, но чтение должно быть в порядке.
Учитывая, что все основные компиляторы компилируют этот код (включая ICC <19.0.1), это может быть просто регрессия в ICC 19.0.1. </p>