Ответ 1
Нет, такого пути нет.
К сожалению.
N3583 - это документ, предлагающий изменения, чтобы разрешить то, о чем вы просите.
Есть ли способ достичь различного поведения функции 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
только время компиляции?
Нет, такого пути нет.
К сожалению.
N3583 - это документ, предлагающий изменения, чтобы разрешить то, о чем вы просите.