Следующий код не компилируется "Borland Builder 6" с ошибкой "Member identifier expected",
и компилируется с помощью Microsoft Visual C++ Toolkit 2003:
template<class C> class Q {public: void operator+=(C a){}};
template<class T> class W: public Q<W<T> >
{public:
void operator+=(double y){}
using Q<W<T> >::operator+=;
};
int main() { W<int> a, b; a+=b; return 0;}
Если убрать заменить operator+= обычной функцией с той же сигнатурой,
то Builder выдаёт "Cannot conver 'W(int)' to 'double'"
Если убрать параметризацию W по T, то Builder не ругается.
Вроде, должно всегда работать. В чем может быть проблема?