constexpr - разочарование
От: Дрободан Фрилич СССР  
Дата: 13.06.17 14:34
Оценка: 3 (1) -1
Категорически приветствую!

Игрался с констэкспрами.

template <typename T>
constexpr int my_log2(T n)
{
    return n? 1+my_log2(n>>1): -1;
}

int main()
{
    return my_log2<unsigned>(42);
}


И VC , и G++ генерят обычные вызовы даже в релизе.
Вычисления в compile time производятся только если компилятор припереть к стенке,
напр. передать параметром в шаблоне:
template <int I> struct eval_im
{
    enum { value = I };
};


Это нормально?
Это как гордая птица ёж, которая без пинка не полетит.

Еще вопрос. Поскольку на constexpr функции накладываются ограничения, ее реализация бывает неэффективна.
Можно ли сделать две версии функции constexpr и не constexpr, но с одинаковым именем и списком параметров?
Отредактировано 13.06.2017 20:21 Bill Baklushi . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.