Этот фрагмент кода скомпилирован без проблем:
const int tmp1 = 1, tmp2 = 1;
const bool cmp = (tmp1 == tmp2);
static_assert(cmp, "OK");
Этот код тоже подходит:
const bool cmp = (HUGE_VALF == HUGE_VALF);
static_assert(cmp, "OK");
Этот код не является:
const auto tmp = HUGE_VALF;
const bool cmp = (tmp == tmp);
static_assert(cmp, "OK"); // <-- error
Ошибка: выражение должно иметь постоянное значение.
Значение переменной "cmp" нельзя использовать в качестве константы
То же поведение с static const
.
Что не так? HUGE_VALF
- это макрос препроцессора, то есть константа, а cmp
- без сомнения, постоянная времени компиляции ...
Среда:
Microsoft Windows 10
Microsoft Visual C ++ 2013 & 2019