Minha dúvida é na questão do compilador gerar em tempo de compilação códigos distintos da classe, então existiriam duas classes de pessoa para pessoa com cfp e pessoa com rg, por exemplo.
Existiriam então problemas então no uso de algo como
//Na definiçao de Pessoa temos
public:
std::string comparaNome(Pessoa<Documento> outra) const
{
std::string nome = recuperaNome();
return nome._Equal(outra.recuperaNome());
}
//na main temos
Pessoa<Cpf> pessoa(Cpf("000.000.000-00"), "José");
Pessoa<string> outraPessoa("111.111.111-11", "José");
cout << "E igual :" << pessoa.comparaNome(outraPessoa);
Dando esse erro de compilação
Não há conversão apropriada, que possa ser definida pelo usuário, de "Pessoastd::string" para "Pessoa"
O que parece quebrar a ideia de herança da orientação a objetos, dado que teoricamente é a mesma classe