Return by 'ref' problems...

Remo remotion4d at googlemail.com
Wed Feb 19 09:01:14 PST 2014


> Looks like it's a bug.
How to report this bug ?

It is not possible to use auto because in real code the functions 
are extern(C).
> A workaround is: typeof(&min) fprt = &min;
Yes I already found this workaround, but it is really really ugly 
this way.

private ref int __hidden_fn_1002(ref int lhs,ref int rhs);
typeof(&__hidden_fn_1002) fprt;

Is there a way to make this much shorter?
Something like this ?
typeof(& (ref int __hidden_fn_1002(ref int lhs,ref int rhs))) 
fprt;



On Wednesday, 19 February 2014 at 16:47:08 UTC, Meta wrote:
> On Wednesday, 19 February 2014 at 16:20:39 UTC, Remo wrote:
>> Hi,
>>
>> are there any news about this problem ?
>>
>> This code does compile.
>> [code]
>> ref int min(ref int lhs,ref int rhs) {
>> 	return lhs > rhs ? rhs : lhs;
>> }
>> auto fptr = &min;
>>
>> pragma(msg,typeof(fptr).stringof);  //int function(ref int 
>> lhs, ref int rhs) ref
>> [/code]
>>
>> But how to manually specify type of fptr?
>>
>> This does not compiles
>> [code]
>> int function(ref int lhs, ref int rhs) ref  fptr3 = &min; 
>> //Error:  no identifier for declarator int function(ref int 
>> lhs, ref int rhs)
>> [/code]
>>
>> this one too.
>> [code]
>> ref int function(ref int lhs, ref int rhs)   fptr3 = &min; 
>> //Error: only parameters or foreach declarations can be ref
>> [/code]
>>
>> Right now I am using dmd.2.065.0-rc1.
>
> Looks like it's a bug. A workaround is:
>
> typeof(&min) fprt = &min;
>
> Or just use auto like in your example above.



More information about the Digitalmars-d mailing list