In section 3.6.1.2 of both C++ Standard 1998 and 2003 editions,
An implementation shall not predefine the main function. This function shall not be ov
The intent is to say that aspects of the type of the main function other than the return type are implementation defined. That means this declaration is allowed by this clause of the standard:
int main(int fred, char *bouncy);
but not this one:
void main(int fred, char *bouncy);
Its return type must be int, but the implementation is allowed to have different argument types.