Uma função constexpr pode ser chamada durante o tempo de execução ou no tempo de compilação se seus argumentos forem constexpr .
Espero implementar algo como:
constexpr auto f() {
/* some code ... */
if constexpr ("called in compilation time") {
// ...
} else {
// ...
}
/* rest code ... */
}
Como faço isso?
Introdução ao C++23
if consteval
, que faz exatamente o que você quer:Demonstração
C++20 tinha
std::is_constant_evaluated()
, que faz a mesma coisa. Note que ele não deve ser usado em umaif constexpr
declaração, pois sempre retornarátrue
nesse caso:Demonstração
Antes do C++20, não havia como determinar se uma função era avaliada de forma constante.