Subject: Re: [ub] What does "The function main shall not be used within a program" mean?
From: Ville Voutilainen (ville.voutilainen_at_[hidden])
Date: 2014-01-22 00:12:31
On 22 January 2014 03:40, David Krauss <david_work_at_[hidden]> wrote:
>>> 1. Violation of shall is diagnosable unless otherwise specified (1.4/1).
>> Ok. I don't think this is obviously clear.
> No? Its the usual blanket rule. Not clear if thats how compliance works, or if it applies in this instance?
>>> 2. I would take use to mean ODR-use.
>> I wouldn't, I would take "use" to mean any use, not just odr-use.
> Well, a definition is also a use, in the sense that the name is looked up. Also the linkage is implementation-defined, while if no aspect could ever be inspected, it might as well be merely implementation-specific.
> I dont see what utility other uses could have though, given that ODR-use isnt allowed.
I don't think decltype(main()) is an odr-use, or sizeof(decltype(main)).
>>> 3. Far as I know, the implementation is allowed to perform dynamic initialization of globals in main. So for all intents and purposes, its not really usable as a function because its body doesnt describe what it does.
>> Well, apparently some implementations think they can get away with it
>> under the auspices of undefined behavior. :)
> Eh each implementation is ultimately written for the satisfaction of its own customers, and there are enough folks who like to recurse main.
> I dont recall ever seeing an implementation not to allow safe recursion of main. Often the C runtime
gcc doesn't allow it if given -pedantic.
SG12 list run by herb.sutter at gmail.com