Смешанная арифметика и friend вне шаблона класса

Рейтинг: 0Ответов: 2Опубликовано: 13.12.2014

Здравствуйте!

Хочу вынести friend-функцию оператора за определение класса:

template<typename T>
class A;

template <typename T>
const A<T> operator + (A<T> a, const A<T>& b);

template <typename T>
class A {
...
public:
    A(){...}
    A(T t){...}
    const A& operator += (const A& r);
    friend const A operator + <T> (A a, const A& b);
};

template <typename T>
const A<T>& A<T>::operator += (const A<T>& r) {...}

template <typename T>
const A<T> operator + (A<T> a, const A<T>& b) {
    return a += b;
}

Однако с этим кодом проблема: A<int> += 1 работает, а вот A<int> + 1 — нет:

int main() {
    A<int> (1) += 2;  // Ok
    A<int> (1) + A<int> (2);  // Ok
    A<int> (1) + 2;  // Error!
    return 0
}

Т. е. смешанная арифметика не работает. Вопрос — почему, и как правильно ее сделать?

Ответы

Ответов пока нет.