Et klassisk eksempel er fakultetsfunksjonen som i vanlig C++ kan skrives som en rekursiv funksjon.Denne funksjonen vil bli beregnet under kjøretid. Samme algoritme kan uttrykkes i templatmetaprogrammering og i stedet bli beregnet under kompilering. Følgende er et eksempel på en rekursiv metafunksjon som uttrykker samme algoritme.Ved rekursive metafunksjoner uttrykker man gjerne basistilfellet (i dette tilfellet 0) som en «template specialization» (templatspesialisering). Denne metafunksjonen vil beregnes ved kompilering og resultatet vil behandles som en prekalkulert konstant i programmet. Det vil si at alle tilfeller av for eksempel fakultet<3>::resultat vil i det kjørbare programmet erstattes med verdien selv. En viktig observasjon er også at siden dette blir kalkulert under kompilering, krever det at argumentet til metafunksjonen er kjent under kompilering. Med andre ord kan argumentet kun være et konstantuttrykk eller et «constant literal» (i dette tilfellet alle naturlige heltall uten variabelbinding). Merk også at dette betyr at alle uttrykk deklarert som constexpr kan gis som argument, siden disse omfatter konstantuttrykk fra og med versjonsstandarden C++11.