On 19 August 2015 at 23:26, Paolo Carlini <paolo.carl...@oracle.com> wrote:
> Hi Ville,
>
>
> On 08/19/2015 10:12 PM, Ville Voutilainen wrote:
>>>
>>> submitter noticed that, in violation of [basic.start.main], we don't
>>> reject
>>> as ill-formed the declaration of a 'main' variable in the global
>>> namespace.
>>> Not a big deal IMHO, but the below simple check works well for me on
>>> x86_64-linux.
>>
>> Just fyi, gcc accepts
>>
>> decltype(main) x;
>>
>> decltype(sizeof(decltype(main)*)) x;
>>
>> which are "uses" of main and also violate [basic.start.main]/3.
>
> "good" to know. In my experience sometimes the front end appears to
> so-to-speak pre-declare entities. For instance I filed a while ago
> c++/48396. Not sure if in practice the exact same code is involved...

Let me clarify: this is not about that. It's code like

int main() {}

decltype(main) x;

whereas just having

decltype(main) x;

as the whole program will diagnose the use of an undeclared
identifier. Nevertheless,
no use, not just odr-use, but use of main as in the entry point
pseudo-function is allowed
by the standard, but gcc allows some of them. gcc rejects attempts to
call main even in
such decltype contexts, but it can be fooled to allow other uses of main.

Reply via email to