On 26 September 2012 13:09, deadalnix <deadalnix@gmail.com> wrote:
Le 26/09/2012 10:14, Manu a écrit :
On 26 September 2012 02:35, Timon Gehr <timon.gehr@gmx.ch
<mailto:timon.gehr@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.

I can't imagine why the example above is hell, but I know nothing about the compiler.

I have no idea how the existing bug was implemented, but it needs to be fixed one way or another.
It sounds fairly trivial to me to promote a prototype to a definition if a definition is found later in the same module.