A parte che confronti mele e pere?
Non ha nessun senso logico fare un confronto tra una lista e un const char*. I confronti si fanno tra insiemi o elementi omogenei.
Tra l'altro quell'operatore inficia il senso stesso del template. Se istanzi la lista con un dato utente, si ricade nel caso di prima.
Comunque il tuo problema è che l'operatore in questione non è mai invocato, per quello non ti funziona.
Il confronto avviene sugli elementi restituiti, non tramite l'operatore che hai definito.codice:bool esito = (lis.leggilista(p) < lis.leggilista(lis.succlista(p)));
Per usare l'operatore devi modificare così:
codice:bool esito = (lis < lis.leggilista(lis.succlista(p)));