Почему сравнение двух параметров функции constexpr не является постоянным условием для статического утверждения?
constexpr uint32_t BitPositionToMask(int i,int Size){
static_assert(i < Size,"bit position out of range");
return 1 << i;
}
это порождает:
error: non-constant condition for static assertion
на GCC 4.6.2 я не получаю что-то или это ошибка GCC?
обновление: спасибо, Энди, что снова стал моим ангелом-хранителем. Поскольку у меня есть значения во время компиляции, я просто сделал его шаблоном, и он работает по назначению.
template<int i,int Size>
constexpr uint32_t BitPositionToMask(){
static_assert(i < Size,"bit position out of range");
return 1 << i;
}
1 ответов
A constexpr
функция также может быть вызвана с аргументами, оцененными во время выполнения (в этом случае она просто выполняется так же, как любая обычная функция). См., например, это видео.
A static_assert()
, С другой стороны, строго требует, чтобы его условие было постоянным выражением, которое может быть оценено во время компиляции.