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