Почему сравнение двух параметров функции 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(), С другой стороны, строго требует, чтобы его условие было постоянным выражением, которое может быть оценено во время компиляции.