On 08/15/2011 11:15 PM, Andrew Wiley wrote:
On Mon, Aug 15, 2011 at 1:57 PM, Andrei Alexandrescu
<seewebsiteforem...@erdani.org <mailto:seewebsiteforem...@erdani.org>>
wrote:

    On 8/15/11 2:19 PM, Jacob Carlborg wrote:

        On 2011-08-15 21:00, Walter Bright wrote:

            On 8/15/2011 3:54 AM, Timon Gehr wrote:

                'When the last ExpressionStatement in a function body is
                missing the
                ';', it is
                implicitly returned.'


            This has been proposed several times before, it was also
            proposed for
            C++0x. The difficulty is it makes having a ; or not
            substantially alter
            the semantics. The history of these languages is that the
            presence or
            absence of ; can be hard to spot, as in:

            for (int i = 0; i < 10; i++);
            ... do this ...

            which has cost at least one expert developer I know an
            entire afternoon
            staring at it convinced there was a compiler bug because his
            loop
            executed only once.

            (And this is why D disallows this syntax.)


        Can't we always automatically return the last expression, even if it
        ends with a semicolon?


    Then two semicolons mean return void :o).


If you want void, you have to use this as your last expression:
...- --- .. -..;


Two semicolons means the last statement is an empty statement, so Andrei's suggestion would be sensible if the last expression was implicitly returned all the time ;)

@Topic:
So, I'm not convinced that accidents related to writing one surplus ; or leaving one ; away would lead to hard to find and impossible to statically catch bugs. (After all, such accidents would *always* make it into the type signature of the function.) As this apparently has been discussed before, does anyone actually have a real world example where it could be shown to be problematic?

Reply via email to