[dmd-beta] rvalue references

Sean Kelly sean at invisibleduck.org
Mon Apr 16 11:29:38 PDT 2012


On Apr 15, 2012, at 5:29 PM, Jonathan M Davis wrote:

> On Sunday, April 15, 2012 09:07:03 Sean Kelly wrote:
>> On Apr 13, 2012, at 1:48 PM, "Jonathan M Davis" <jmdavisProg at gmx.com> wrote:
>>> On Friday, April 13, 2012 22:18:16 Don Clugston wrote:
>>>> Interestingly, the ref int[3] idiom is documented as working, under
>>>> 'interfacing with C'.
>>>> Anything beyond that seems to be undefined.
>>>> That page seems to document dynamic arrays as _not_ working --
>>>> certainly as having no C equivalent.
>>> 
>>> Which seems really backwards considering that in both case, you'd be using
>>> T* in C, and if anything, dynamic arrays are closer to that than static
>>> arrays. Personally, I'd have expected arr.ptr to be required in both
>>> cases.
>> The problem is mostly with stuff like:
>> 
>> extern (C):
>> alias int[2] foo;
>> void fn(foo);
>> 
>> Now make the alias platform-dependent (as in the Posix package) and tell me
>> what the prototype for fn() should be. Fortunately, static array args are
>> almost nonexistent in C99 and Posix.
> 
> It was my understanding that you arrays in C are _always_ passed as a pointer 
> and that even if you use [] instead of * on the parameter, it's the same as 
> using * and that there was no way to specifically pass a static array 
> differently from a dynamic one. But I may remember that incorrectly, since I 
> almost never use static arrays.
> 
> If I'm right though, then fn will just always take an int*.

Sure… as long as you're sure "foo" is a static array.  But if it's an alias that the spec allows to be an opaque type...


More information about the dmd-beta mailing list