August 20, 2018
The code below doesn't work. Is it possible to make a pure opEquals in a class?

void main()
{
	class A
	{
		bool a;
		int b;
		
		this(bool g, int h)
		{
			a = g;
			b = h;
		}
				
		pure bool opEquals(const A rhs) const
		{
			return b == rhs.b;	
		}		
	}
		
	A a = new A(true, 5);
	A b = new A(false, 5);
	
	assert(a == b); //fails
}
August 20, 2018
On Monday, 20 August 2018 at 19:36:15 UTC, werter wrote:
> The code below doesn't work. Is it possible to make a pure opEquals in a class?
>
[...]
> 		pure bool opEquals(const A rhs) const
> 		{
> 			return b == rhs.b;
> 		}

It doesn't work because `rhs` has the wrong type. It must be `Object`.

    override pure bool opEquals(const Object rhs) const
    {
        const A a = cast(A) rhs;
        return b == a.b;	
    }