Ну если функция void, то она впринципе ничего возвращать не может, следовательно в ней нету ключевого слова "return". Если же в начале функции (в самом начале при объявлении) стоит любой другой тип данных, к примеру: int или bool, то функция будет возвращать именно этот тип данных
Ну... можно думать про void как о типе, в котором есть одно единственное значение. Это ближе к его сути. В этому случае мы просто пишем return, а поскольку вернуть мы можем одно единственное значение, то его и не указываем.
Но всё-таки void изначально недоделаный. И, когда мы сталкивается с шаблонами, то это таки проявляется. Например, у нас есть шаблонный код, который считает время выполнения функции f:
auto start = get_time();
T value = f(...);
auto fihish = get_time();
std::cout << "Time in function: " << finish - start << std::end;
return value;
Увы, если T это void то такой код не скомпиируется. Хотя, если считать что мы можем объявлять переменную типа void с одним значением, то... Тут бы ничего страшного не было, за исключением пары оптимизируемых пустых операций.