Я хочу определить бинарный оператор в глобальном пространстве имен. Оператор работает над классом, который определен в другом пространстве имен, и оператор должен получить доступ к частным членам этого класса. Проблема в том, что я не знать, как обладать глобальным оператором, когда он делает его другом в определении класса.
Я пробовал что-то вроде:
namespace NAME
{
class A {
public:
friend A ::operator * (double lhs, const A& rhs);
private:
int private_var;
};
}
A operator * (double lhs, const A& rhs)
{
double x = rhs.private_var;
...
}
Компилятор (g++ 4.4) не знал, что с ним делать. Кажется, что линия
friend A ::operator * ()
оценивается как нечто вроде (псевдокода)
(A::operator)
вместо
(A) (::operator)
Если я не укажу:: в объявлении оператора компиляция работает, но оператор находится в пространстве имен NAME, а не в глобальном пространстве имен.
Как я могу квалифицировать глобальное пространство имен в такой ситуации?