[ub] What does "The function main shall not be used within a program" mean?

Ville Voutilainen ville.voutilainen at gmail.com
Wed Jan 22 01:49:13 CET 2014

An infinite recursion example:

int main() {auto* x = &main; x();}

A non-infinite one:

int x = 0; int main() {auto* f = &main; if (++x == 0) f();}

gcc rejects these with a diagnostic (when given -pedantic). clang does

1) does a violation of a "shall" requirement mean UB in general,
or ill-formed (if ill-formed, is a diagnostic required?)?
2) what does it mean in this particular case?
3) why?

More information about the ub mailing list