У меня странная проблема, и мне интересно, почему g ++ 4.1.2 ведет себя так, как он.
Раздели к его основам:
#include <iostream>
template<typename T>
inline void f(T x) { std::cout << x*x; }
namespace foo {
class A {
public:
void f() const { f(2); }
};
}
Сбой вызова f(2)
, поскольку компилятор не соответствует функции шаблона f
.
Я могу заставить его работать с ::f(2)
, но я хотел бы знать, ПОЧЕМУ это необходимо, поскольку это совершенно однозначно, и насколько мои (по общему мнению, устаревшие) знания правил сопоставления, это должно работать.