Per essere più chiari, se volessi trasformare questo metodo in sovraccarico dell'operatore <= ?

Da notare che sostanzialmente mi serve potermi ricavare la testa della lista mediante il metodo primoLista() e poter controllare che la lista non sia finita mediante il metodo finelista(posizione) che mi restituisce un booleano.

Se io creo una un sovraccarico di operatore dentro liste_collegate poi si aspetterà che un operatore sia proprio un oggetto di tipo liste_collegate e l'altro a mio piacere quindi di tipo posizione. Ma come faccio a passargli la seconda posizione?

Se invece la dichiaro come funzione sciolta posso passargli due posizioni, ma come gli passo la lista su cui operare?

codice:
template< class T, class P >
bool liste_collegate<T,P>::controllo_posizione(posizione p1, posizione p2) const
{
     posizione testa;
    
     bool val_return = false;
     
     testa =  primoLista();
     
    //scandisce finchè non arrivo a p2 o comunque non arrivo a finelista
   //supponiamo però che almeno p2 è una posizione valida
     while( (testa != p2) && !finelista(testa) && (val_return == false) )
     {
         if(testa == p1)
             val_return=true; 
           
         testa=succlista(testa);     
     }
    //caso in cui la posizione p1 è proprio il finelista  e/o è proprio p2
    if(testa == p1)
        val_return=true; 

    return val_return;        
}