#include <iostream>
using namespace std;
int main() {
cout << int() << endl;
cout << double(78) << endl;
cout << bool(-1) << endl;
// void r = void();
// error: void value not ignored as it ought to be
void();
void(42);
return 0;
}
Вывод:
0
78
1
Это синтаксический сахар, который можно понимать, как конструктор встроенного типа, но фактически это работает, как приведение к типу
(int)0, (double)76, (bool)-1 соответственно
и вызова конструктора не происходит.
Т.е. при компиляции вместо void() произойдет (void)0, результатом будет void. Функция foo возвращает void, потому что это "обратная совместимость" с языком C.