К моему удивлению, эта программа компилируется как в MSCV, так и в GCC:
class A
{
public:
int add() { return 0; }
template<typename T>
T add() { return T(); }
};
int main() {
A a;
a.add();
a.add<int>();
return 0;
}
Очевидно, из-за того, что тип шаблонного метода не может быть выведен и должен быть явно указан, так что ситуация не является двусмысленной - все же она кажется немного теневой - если бы это был не шаблонный метод, было бы явно неверно.
Я пробовал поиск в Google и просматривал последний черновик стандарта, но не смог найти ответ - это то же самое имя метода шаблона и обычный метод, который отличается только по типу возвращаемого типа, законным в С++, или компиляторы просто разрешительны?