C++ · Intermediário · Inglês · Técnico
concept
Recurso do C++20 que nomeia um conjunto de requisitos sobre o tipo de um template. O compilador o verifica e dá erros bem mais claros que o SFINAE.
Onde usar
Usado para restringir templates, como template <std::integral T>, deixando a intenção explícita. Em vez de uma parede de erros, o compilador diz qual requisito falhou.
Em código
template <typename T>
concept Somavel = requires(T a, T b) {
{ a + b } -> std::convertible_to<T>;
};
template <Somavel T>
T somar(T a, T b) { return a + b; }Exemplos
Constrain the template with a concept instead of SFINAE.
Restrinja o template com um concept em vez de SFINAE.
The error now says the type doesn't satisfy the concept.
O erro agora diz que o tipo não satisfaz o concept.
Cuidado
Um concept só verifica a sintaxe exigida, como a existência de operações; não garante que a semântica do tipo seja a esperada.
Sinônimos
restrição de template