Explicitly saying ref or out when invoking a function
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Wed Aug 12 19:25:44 PDT 2009
Lionello Lunesu wrote:
>
> "Andrei Alexandrescu" <SeeWebsiteForEmail at erdani.org> wrote in message
> news:h5ttfi$cf3$1 at digitalmars.com...
>> Lionello Lunesu wrote:
>>>
>>> "Jeremie Pelletier" <jeremiep at gmail.com> wrote in message
>>> news:h5sl4c$1733$1 at digitalmars.com...
>>>> It's especially bad since if you modify the function prototype and
>>>> change ref, you have all your calls to update too.
>>>
>>> That must be the best argument to introduce repeating ref and out!
>>>
>>> L.
>>
>> // untested
>> struct Ref(T)
>> {
>> private T* _data;
>> this(ref T data) { _data = &data; }
>> ref T get() { assert(_data); return *_data; }
>> alias get this;
>> }
>> Ref!(T) byRef(ref T data)
>> {
>> return Ref!(T)(data);
>> }
>>
>> ...
>>
>> void fun(Ref!int rint) { ... }
>> ...
>> int x;
>> fun(byRef(x));
>
> Andrei, you bring the compiler vs library discussion to a whole new
> level :)
>
> We can add "ref" to the list of keywords that can be freed up.
Good point, but actually ref can't be freed, because it would fall prey
to infinite regression: if there was no ref keyword, how would you pass
by reference the argument to the byRef function?
Andrei
More information about the Digitalmars-d
mailing list