Nevím co přesně dělá to Vaše makro assert, ale pokud je to totéž co v Céčku, nebylo by lepší jej nahradit něčím, co hodí výjimku (když už mluvíme o C++)? Je sice hezké, že factorial() nepřipustí chybný vstup, ale zase je nehezké, aby se kvůli tomu zbortilo řízení jedoucího vlaku...