The assignment operator can be overloaded using a member function but not a non-member friend function:
class Test
{
int a;
public:
Test
Because the default operator= provided by the compiler (the memberwise copy one) would always take precedence. I.e. your friend operator= would never be called.
EDIT: This answer is answering the
Whats the inherent problem/limitation in supporting = operator ?
portion of the question. The other answers here quote the portion of the standard that says you can't do it, but this is most likely why that portion of the standard was written that way.