Метапрограммирование это не про написание кучи страшного кода.
В этот раздел попадают шаблоны, макросы, константные выражения.
К примеру тот же факториал:
Код
constexpr int fact(int a) {
return (a != 0) ? fact(a-1)*a : 1;
}
int r = fact(3);
//Преобразуется в:
int r = 6;
Метапрограммирование - неотъемлемая часть программирования в общем, но не следует им злоупотреблять