According to ISO/IEC 9899:1999, §5.1.2.2.1, p. 12, ¶2:

The parameters argc and argv and the strings pointed to by the argv array shall be modifiable by the program, and retain their last-stored values between program startup and program termination.

Does this requirement imply that this is not a strictly conforming definition of main ?

int main(const int argc, const char * const * const argv) { /* ... */ }

Or is the requirement just a guarantee that the function won't be called in a manner that modifying data results in undefined behavior, such as this?

const int argsno = 1;
char *args[] = { "progname" /* String literal */ , (char *)0 };
main((int) argsno, args);

Note: in ISO/IEC 9899:2018 the quoted paragraph is found in §5.1.2.2.1, p. 11, ¶2.