It was no oversight. The actual reason for the constraint is encapsulation.
operator=() acts on it's left hand operand (i.e. "a = b" changes a directly; it does not create any temporaries, new objects, etc). operator=() is therefore part of the interface of the class. Allowing it to be a non-member function would allow other, unrelated, code to arbitrarily change how assignment works for the class. i.e. it would allow other code to directly change the class interface, and potentially introduce new behaviour that breaks the class, without knowledge of the class designer.
constructors and destructors are required to be member functions for the same reason.
It prevents things like this;
Code:
class BigInteger
{
// all sorts of things to make class work
};
// some evil code
// create an assignment operator with the body that effectively does this regardless of RHS
BigInteger operator=(BigInteger &lhs, const BigInteger &rhs)
{
lhs.SetContents(42); // set *this to be value of 42 regardless of value of rhs, and without knowledge of original class designer
}