Código C++:
Ver originalNumero::Numero (const Cadena& numero) throw (Numero::Incorrecto) {
  char* num_nuevo = new char [numero.longitud() + 1];
  strcpy (num_nuevo
, numero.
c_str());   
  struct EsBlanco {
    bool operator
() (char c
) const { return isspace(c
); }  };
 
  struct EsDigito : unary_function<char,bool> {
    bool operator
() (char c
) const { return isdigit(c
); }  };
  
  char* final_nuevo 
= remove_if
(num_nuevo
, num_nuevo 
+ strlen(num_nuevo
), EsBlanco
());   *final_nuevo = '\0';
 
  char* alfabetico = find_if (num_nuevo,final_nuevo,not1(EsDigito()));
  if (*alfabetico != '\0')
  throw(Incorrecto(DIGITOS));
  if (strlen(num_nuevo
) < LongitudMinima 
|| strlen(num_nuevo
) > LongitudMaxima
)     throw(Incorrecto(LONGITUD));
  if (!numeroValido(num_nuevo))
    throw(Incorrecto(NO_VALIDO));
  numero_ = num_nuevo;
}
  
Recibo el siguiente error al compilar: 
tarjeta.cpp: En el constructor ‘Numero::Numero(const Cadena&)’:
tarjeta.cpp:27:85: error: no hay una función coincidente para la llamada a ‘remove_if(char*&, char*, Numero::Numero(const Cadena&)::EsBlanco)’
tarjeta.cpp:27:85: nota: el candidato es:
/usr/include/c++/4.6/bits/stl_algo.h:1131:5: nota: template<class _FIter, class _Predicate> _FIter std::remove_if(_FIter, _FIter, _Predicate)
tarjeta.cpp:30:68: error: no hay una función coincidente para la llamada a ‘not1(Numero::Numero(const Cadena&)::EsDigito)’
tarjeta.cpp:30:68: nota: el candidato es:
/usr/include/c++/4.6/bits/stl_function.h:370:5: nota: template<class _Predicate> std::unary_negate<_Predicate> std::not1(const _Predicate&)
make: *** [tarjeta.o] Error 1