#include <iostream>
using namespace std;

void ech2_par_adresse(float *a, float *b) {
    if (*a > *b) {
        float c = *a;
        *a = *b;
        *b = c;
    }
}

void ordonne_trois(float *a, float *b, float *c) {
    ech2_par_adresse(a,b);
    ech2_par_adresse(b,c); // c contient maintenant le maximum
    ech2_par_adresse(a,b); // il nous reste a trouver le minimum
}

void ech2_par_ref(float &a, float &b) {
    if (a > b) {
        float c = a;
        a = b;
        b = c;
    }
}

void ordonne_trois_ref(float &a, float &b, float &c) {
    ech2_par_ref(a,b);
    ech2_par_ref(b,c);
    ech2_par_ref(a,b);
}

int &identite(int &x) { return x; }
int main() {
    float a=3.0,b=1.0,c=0.0;
    ordonne_trois(&a,&b,&c);
    cout << a << "<" << b << "<" << c << endl;
    float d=3.0,e=1.0,f=0.0;
    ordonne_trois_ref(d,e,f);
    cout << d << "<" << e << "<" << f << endl;

    int x = 3;
    cout << x;
    identite(x) = 2; // identite(x) est juste un alias pour x
    cout << x;
}
