Стандартная грамматика С++ 03 для перегрузки оператора выглядит следующим образом:
оператор-функция-идентификатор:
Оператор оператора
Оператор оператора Шаблон-аргумент-список? >
Первый - это обычный синтаксис перегрузки операторов, который мы обычно используем, например
Myclass operator + (Myclass s) {...}
Но что означает вторая альтернатива? В частности, в какой ситуации мы используем список шаблонов-аргументов? После быстрого просмотра С++ 11 я обнаружил, что вторая форма была удалена из стандарта. Каково было первоначальное намерение?
EDIT: после тестирования с VС++ 2010 ниже приведен один из способов использования вышеупомянутого синтаксиса, хотя для меня это не имеет особого смысла:
class K {
public:
int a;
template <int B>
int operator + (int b) {
return a+b+B;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
K k;
k.a=1;
int s;
s=k.operator+<115>(2);
printf("%d\n",s);
return 0;
}
output:118