Почему нельзя использовать функцию, не являющуюся членом, для перегрузки оператора присваивания?

Оператор присваивания может быть перегружен с помощью функции-члена, но не функции-члена friend :

class Test
{
    int a;
public:
    Test(int x)
        :a(x)
    {}
    friend Test& operator=(Test &obj1, Test &obj2);
};

Test& operator=(Test &obj1, Test &obj2)//Not implemented fully. just for test.
{
    return obj1;
}

Это вызывает эту ошибку:

ошибка C2801: 'operator =' должен быть нестатическим членом

Почему нельзя использовать функцию friend для перегрузки оператора присваивания? Компилятор позволяет перегружать другие операторы, такие как + = и - = , используя friend . Какая внутренняя проблема / ограничение при поддержке operator = ?

29
задан Jamal 14 September 2015 в 16:06
поделиться