Когда ньюфаги пишут, что функция void f(<неважно>) ничего не возвращает, то их поправляют: «нет, вы не правы, ньюфаги, эта функция возвращает void».
Отсюда можно сделать вывод, что тип void в C/C++ это тип-синглтон, т.к. именование типа и значения одним ключевым словом обычно говорит о том, что значение единственно. См. тип () в Haskell.
Тогда почему нельзя создавать переменные типа void (НЕ указатель на него!) и передавать их в функции, принимающие void? Это бы позволило создавать композиции функций: g(f(<аргументы для f>)), где
void f(<параметры f>);
<возвращаемый тип g> g(void);
void как частный случай при композиции.





