Is there a way to return an lvalue and also an rvalue from the same member function?

Steven Schveighoffer schveiguy at
Sun Sep 20 16:18:19 UTC 2020

On 9/20/20 11:52 AM, realhet wrote:
> On Sunday, 20 September 2020 at 14:54:09 UTC, Steven Schveighoffer wrote:
>> On 9/20/20 9:30 AM, realhet wrote:
>> ref inout(int) x() inout { return array[0]; }
> This doesn't work when I type:
> v.x++;

It should, as long as v is mutable.

> I want to make a similar type like the GLSL vectors. Where the following 
> thing is valid:
> vec4 a, b;
> a.yzw = b.xzy;

This should be straight-up opDispatch I would think. You might need a 
helper return that reroutes the correct items.

> The only thing I don't want  to implement from the GLSL spec is those 
> non-contigous swizzle assignments like:
> a.zyx = vec3(1,2,3) ***
> but
> = vec3(1,2,3) should work.

What you could do, in this case, is make your return type either a 
helper type that uses a slice of the original, or one that contains a 
copy of the data in the right order, but is not assignable.

> *** maybe with a struct that refers to the original vector and the 
> swizzle code it could be also possible. :D

Yeah, I think this might work.


More information about the Digitalmars-d-learn mailing list