Определить выполнение `constexpr` - во время компиляции или во время выполнения?

Есть ли способ достичь различного поведения функции constexpr на этапе компиляции и во время выполнения?

Рассмотрим следующий пример (используя теоретический признак от D: static if):

constexpr int pow( int base , int exp ) noexcept
{
    static if( std::evaluated_during_translation() ) {
        auto result = 1;
        for( int i = 0 ; i < exp ; i++ )
            result *= base;
        return result;
    } else { // std::evaluated_during_runtime()
        return std::pow( base , exp );
    }
}

Если нет, существует ли способ ограничить constexpr только время компиляции?

Ответы

Ответ 1

Нет, такого пути нет.

К сожалению.

N3583 - это документ, предлагающий изменения, чтобы разрешить то, о чем вы просите.