На уровень языка следовало много чего встроить, те-же bind сделать на уровне синтаксиса типа {void (*callable)(int) = &(two_arg_fn(5, int))} и другой синтаксический сахар, а не корячиться монстрошаблонами.
Это моё личное предвзятое мнение. Любое совпадение с реальностью является случайным и непреднамеренным.