Generic operator overloading for immutable types?

Gary Willoughby via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Jun 12 13:03:43 PDT 2017


On Monday, 12 June 2017 at 19:36:52 UTC, H. S. Teoh wrote:
> On Mon, Jun 12, 2017 at 07:38:44PM +0000, Gary Willoughby via 
> Digitalmars-d-learn wrote:
>> In the following code is there any way to make the `opBinary` 
>> method generic to be able to accept immutable as well as a 
>> standard type? The code currently passes the unit test but I 
>> wonder if I could get rid of the duplication to overload the 
>> operator? I'm failing badly.
>
> This is what inout was designed for:
>
>  	public inout Rational opBinary(string op)(inout Rational rhs)
>  	{
>  		static if (op == "+")
>  		{
>  			return inout(Rational)(0, 0);
>  		}
>  		else
>  		{
>  			static assert(0, "Operator '" ~ op ~ "' not implemented");
>  		}
>  	}
>
> That should do the trick.
>
>
> T

Quick question about the signature, if I change it to (note the 
parens):

    public inout(Rational) opBinary(string op)(inout(Rational) rhs)

It no longer works, why is that?


More information about the Digitalmars-d-learn mailing list