Retour à la leçon
Mission

Mission : une macro variadique qui boucle a l'infini

Diagnostiquer une macro_rules! recursive mal formee et une struct dupliquee, puis corriger la macro et en generer une version generique.

Contexte

Un dev veut ecrire une macro min_de! (inverse de max_de! vu en cours) pour trouver le plus petit d'un nombre variable d'arguments, mais son projet ne compile plus, avec une erreur de compilation qui mentionne 'recursion limit reached while expanding the macro' :

rust
macro_rules! min_de {
    ($x:expr, $($reste:expr),+) => {
        {
            let a = $x;
            let b = min_de!($($reste),+);
            if a < b { a } else { b }
        }
    };
}

Separement, le projet contient trois struct quasi identiques Point2Di32, Point2Df64 et Point2Du32, copiees-collees a la main avec seulement le type qui change, ce que l'equipe veut remplacer par une seule macro generatrice.