C++ · Avançado · Inglês · Técnico
SFINAE
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 candidataExemplos
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.