ExpertiDict

C++ · Avançado · Inglês · Técnico

SFINAE

ˈsfiː.neɪsigla

Regra pela qual uma falha de substituição de tipos ao deduzir um template não é erro, apenas remove aquela sobrecarga das candidatas. Permite habilitar ou desabilitar templates conforme o tipo.

Onde usar

Aparece em código genérico mais antigo, com std::enable_if, para escolher sobrecargas por propriedades do tipo. Em C++20, concepts substituem a maioria desses usos com erros muito mais claros.

Em código

template <typename T>
std::enable_if_t<std::is_integral_v<T>, T>
dobro(T x) { return x * 2; }
dobro(21);      // ok
// dobro(2.5);  // erro: sem candidata

Exemplos

This overload is SFINAEd out for non integral types.

Essa sobrecarga é removida por SFINAE para tipos não integrais.

Replace the enable if with a concept.

Troque o enable_if por um concept.

Cuidado

Só vale para falhas no contexto imediato da declaração; erros dentro do corpo da função continuam sendo erros de compilação.

Antônimos

concept

Origem

Sigla de Substitution Failure Is Not An Error, falha de substituição não é erro.

Veja também

Todos os termos de C++