Из п. 8.3.5.11 ИСО/МЭК 14882: 2011 (E):
Типичный тип функции может использоваться для объявления функции, но не должен использоваться для определения функции
Далее приводится следующий стандарт:
typedef void F();
F fv; // OK: equivalent to void fv();
F fv { } // ill-formed
void fv() { } // OK: definition of fv
Что мотивирует это правило? Кажется, он ограничивает потенциальную выразительную полезность функций typedefs.