У меня есть два странных случая, когда кажется, что код должен компилироваться, но это не так. Для начала рассмотрим приведенный ниже код, который успешно компилируется:
struct A
{
template <class T>
void member_func(T t)
{
global_func(t);
}
};
int main()
{
}
Но если я полностью укажу global_func, добавив префикс «::», он не скомпилируется с ошибкой «global_func не был объявлен в этой области»:
struct A
{
template <class T>
void member_func(T t)
{
::global_func(t);
}
};
int main()
{
}
Кроме того, если я попытаюсь передать global_func для boost :: bind, он не скомпилируется (та же ошибка):
#include <boost/bind.hpp>
class A
{
template <class T>
void member_func(T t)
{
boost::bind(global_func)(t);
}
};
int main()
{
}
Почему он не компилируется в этих случаях? Кажется, что метод шаблона member_func () не создан, поэтому он не должен найти ошибку отсутствующей функции.