ExpertiDict

C++ · Intermediário · Inglês · Técnico

if constexpr

ɪf ˈkɑːnstɛksprpalavra-chave

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

Veja também

Todos os termos de C++