D&Eにはoperator =が非メンバで定義されると、
場所によってコピーの方法が変わると言うまずい状況になるから
メンバとしてしか定義できないようにしたと書いてある。 

ただしfriendまでは言及されていないが。

struct Hoge {/* 〜 */};

Hoge x, y;

x = y; //デフォルトのコピー

Hoge& operator =(Hoge&, const Hoge&) {/* 〜 */}

Hoge z;
z = x; //さっきのoperator =()