void main returning int - why compiles?

Simen kjaeraas simen.kjaras at gmail.com
Sat Jan 1 13:08:36 PST 2011

Daren Scot Wilson <darenw at darenscotwilson.com> wrote:

> As shown, the "total evil" return statement gets a value from subroutine  
> foo().  Being somehow so perfect in its evilness, this passes through  
> the compiler without a burp.  The resulting executable returns zero (or  
> my bash shell defaults to zero when receiving nothing.)

This is by design, the feature is made for generic functions. Consider:

ReturnType!Fn wrap( alias Fn )( ParameterTypeTuple!Fn args ) {
     return Fn( args );

One would expect that to work. If void functions did not allow returning
the results of functions, the above function would have had to be changed
to something like this:

ReturnType!Fn wrap( alias Fn )( ParameterTypeTuple!Fn args ) {
     static if ( is( typeof( return ) == void ) ) {
         Fn( args );
     } else {
         return Fn( args );

Clearly this code is worse than the above.


More information about the Digitalmars-d-learn mailing list