Function prototype + definition in the same file

deadalnix deadalnix at gmail.com
Wed Sep 26 03:09:58 PDT 2012


Le 26/09/2012 10:14, Manu a écrit :
> On 26 September 2012 02:35, Timon Gehr <timon.gehr at gmx.ch
> <mailto:timon.gehr at gmx.ch>> wrote:
>
>     On 09/26/2012 01:29 AM, Timon Gehr wrote:
>
>         On 09/25/2012 01:53 PM, Manu wrote:
>
>             So I have this recurring pattern, it's really starting to
>             annoy me.
>             It stems from the fact that a function prototype and the
>             definition can
>             not appear in the same file in D (as it can in C/C++)
>             Eg,
>
>             void func(int x); // <-- declaration of function, informs
>             type and
>             associated names, args, ...
>
>             //later
>             void func(int x) // <-- may be generated with magic (and may
>             use the
>             prototype declaration for type information as declared by
>             the prototype
>             above)
>             {
>                 ... do stuff
>             }
>
>             I really need this. Why is it illegal? Is there chance of
>             having this
>             supported? What are the problems?
>             ...
>
>
>         It is illegal because nobody has written code to support it. It
>         should be possible to support it. I don't think there are any
>         problems
>         with the concept.
>
>
>     (The implementation faces some challenges, the following is easy to
>     get wrong:
>
>     module module_;
>
>     void foo();
>
>     alias foo alias1;
>     static if(is(typeof(alias1))){
>          void foo(){}
>          alias foo alias2;
>     }
>
>     static assert(__traits(isSame, alias1, alias2));
>     static assert(__traits(allMembers, module_).length == 3); // 2
>     alias, 1 function definition
>     )
>
>
> I'm not sure I understand the point being illustrated here. I don't see
> how the aliases are relevant?

 From a compiler perspective, the example above is hell. That was his point.

In other terms, supporting such a feature add complexity to the 
compiler, and it should come with a sufficient benefice to make sense to 
implement.


More information about the Digitalmars-d mailing list