Correction suite à son EDIT furtif.

Pollux (./26) :
Ca me paraît pas très extensible comme façon de savoir si la classe vérifie un prédicat, ça veut dire que c'est impossible de linker ensemble deux modules qui ont été compilés avec des versions différentes de maylib (alors que si tu veux t'en servir comme CAS sur calculatrice la compatibilité binaire est super importante). Pourquoi pas utiliser à la place un champ avec des flags genre ASSERT_COMMUTATIVE_PRODUCT ? Comme ça tu pourras en rajouter d'autres quand t'en auras besoin...
Ok pour le flags ==> Dans le TODO.
Pollux (./26) :
Dangereux à quel point ? Crash ou résultats faux ?
Crash et résultat faux. Il faudrait que je précise les conditions d'utilisation.
Si MAY est compilé avec les assertions, ca ne doit que faire que lever une assertion dans le pire des cas (mais ce n'est pas garanti).
Pollux (./26) :
Est-ce que may_eval(may_foo_c(may_bar_c(x,y),z)) est équivalent à may_foo(may_bar(x,y),z) ? (modulo la rapidité si par exemple foo=mul et z=0)
Oui. Par contre,
may_eval(may_foo_c(bar = may_bar_c(x,y),z))
bar est incorrect (une évaluation invalide toute les références aux éléments non évalués qu'elle parcourt). Alors que :
may_foo(bar = may_bar(x,y),z)
bar est correct.