Il y a en fait 3 probleme:
1. l'interface ne peut pas marcher parceque tu fais des copies, ce qui a ete pointe auparavant.
2. tu n'utilises pas l'interface de unique_ptr mais un detail d'implementation, ce qui a ete pointe auparavant.
3. dans l'appel a sort:
sort(ListeDePatient.begin(),ListeDePatient.end(),NasGreater); // ici
Tu passes un nom de type en troisieme paramettre, pas un objet.
Ce que tu veux c'est:
sort(ListeDePatient.begin(),ListeDePatient.end(), NasGreater() );
La c'est bien un objet (temporaire, via l'appel du constructeur).
NOTE: en C++11 on aurait plutot ecrit
sort( begin(ListeDePatient), end(ListeDePatient), NasGreater{} );
ou encore
sort( begin(ListeDePatient), end(ListeDePatient), [] /* le code du lambda */ );
---- EDIT
Rectification: ce que je pointais au dessus est vrai uniquement si NasGreater est un type (fonction-objet) ce qui n'est pas le cas ici puisque c'est une fonction (j'avais mal lu, par reflex).
Dans ce cas tu aurais du donner l'adresse de la fonction, il me semble que Visual Studio accepte directement le nom mais que c'est pas standard donc d'autres compilateurs ne l'accepteronent pas.
sort( begin(ListeDePatient), end(ListeDePatient), &NasGreater );
Partager