Why does this line need 'void'?

When the regular C/C++ Compiler (like Code::Blocks) does not allow calling a user-defined function without having its prototype before the main() function, then the Arduino IDE's Compiler should have the same tendency. Am I correct?

However, the Arduino users are not strictly required to declare such prototypes as the compiler does it for them in the background, which I have understood reading various posts of this Forum. And yet some of the IDE's built-in functions like: Wire.onReceive(receiveEvent); and others do require forward declaration.