Will automatic return type deduction work for main?

后端 未结 1 1458
孤独总比滥情好
孤独总比滥情好 2020-12-02 01:53

Will I be able to do the following for the main function in C++1y (C++14):

auto main()
{
    // ...
}

So will the return type automatically

相关标签:
1条回答
  • 2020-12-02 02:09

    No, it won't be allowed. Paragraph 7.1.6.4/10 of the C++14 Standard Draft N3690 specifies:

    If a function with a declared return type that uses a placeholder type has no return statements, the return type is deduced as though from a return statement with no operand at the closing brace of the function body. [...]

    This means that omitting a return statement in main() would make its type void.

    The special rule introduced by paragraph 3.6.1/5 about flowing off the end of main() specifies:

    [...] If control reaches the end of main without encountering a return statement, the effect is that of executing

    return 0;
    

    The wording says that the "effect" during the execution of the program is the same as though a return 0 was present, not that a return statement will be added to the program (which would affect type deduction according to the quoted paragraph).

    EDIT:

    There is a Defect Report for this (courtesy of Johannes Schaub):

    Proposed resolution (November, 2013):

    Change 3.6.1 [basic.start.main] paragraph 2 as follows:

    An implementation shall not predefine the main function. This function shall not be overloaded. It shall have a declared return type of type int, but otherwise its type is implementation-defined. All implementations An implementation shall allow both

    • a function of () returning int and
    • a function of (int, pointer to pointer to char) returning int

    as the type...

    0 讨论(0)
提交回复
热议问题