Oui, c'est un upcast, disons que contrairement à tout le reste, c'est compréhensible que ça ne marche pas

(ça peut être sympa dans certaines circonstances, mais garantir une certaine opacité du style "si cette fonction prend en argument une mother, alors elle va considérer son argument uniquement comme une mother" n'est pas sans avantages non plus... un peu comme la différence entre le passage par valeur et le passage par référence : passer une variable par valeur, ça empêche de la modifier, mais du côté de l'appelant tu as la garantie que ta variable ne sera pas modifiée après l'appel de la fonction...)