In the patch for bug #205563 I moved some code: [[ ... LayoutUnit logicalWidth = snappedSelectionRect.width(); if (snappedSelectionRect.x() > logicalRight()) logicalWidth = 0; else if (snappedSelectionRect.maxX() > logicalRight()) logicalWidth = logicalRight() - snappedSelectionRect.x(); ... ]] And in the process changed: LayoutUnit logicalWidth = snappedSelectionRect.width(); to auto logicalWidth = snappedSelectionRect.width(); As a result logicalWidth was now an int. This led to bad things when "snappedSelectionRect.maxX() > logicalRight()" evaluates to true because we would then compute "logicalRight() - snappedSelectionRect.x()" (which would be a float since logicalRight() is a float) and then integer truncate to assign to logicalWidth. This bug would have been prevented if LayoutUnit::operator(const float&) did not exist because it would have forced the code to have been written (pre-my move): [[ ... LayoutUnit logicalWidth = snappedSelectionRect.width(); if (snappedSelectionRect.x() > logicalRight()) logicalWidth = 0; else if (snappedSelectionRect.maxX() > logicalRight()) logicalWidth = LayoutUnit { logicalRight() - snappedSelectionRect.x() }; ... ]] (Notice the explicit constructor call to LayoutUnit in the second branch). And so if I had then changed LayoutUnit => auto it would have compile-time failed and I would have seen my mistake because the code would now be trying to illogically assign a LayoutUnit to an int.