C++ · Intermediário · Inglês · Técnico
if constexpr
Condicional do C++17 avaliado na compilação dentro de templates. O ramo não escolhido não é instanciado, então pode conter código que não compila para aquele tipo.
Onde usar
Substitui boa parte do SFINAE e do despacho por tags quando um template precisa se comportar de forma diferente por tipo. Deixa a lógica em uma única função legível.
Em código
template <typename T>
auto valor(T x) {
if constexpr (std::is_pointer_v<T>)
return *x;
else
return x;
}Exemplos
Use if constexpr to handle pointers differently.
Use if constexpr para tratar ponteiros de outro jeito.
The else branch is discarded at compile time.
O ramo else é descartado em tempo de compilação.
Cuidado
Fora de templates, o ramo descartado ainda precisa ser válido; o descarte só vale para código que depende dos parâmetros do template.
Sinônimos
if estático