я наткнулся на компиляцию .. странность? недавно это привело меня к мысли, что шаблон при его создании создается в тех же пространствах имен (или, по крайней мере, using
в тех же пространствах имен), что и тот, который был объявлен. То есть;
template<class T>
class bar
{
public:
static int stuff(){return T::stuff();}
};
namespace ONE
{
struct foo
{
static int stuff(){return 1;}
};
}
namespace TWO
{
struct foo
{
static int stuff(){return 2;}
};
}
using namespace TWO;
int main()
{
return bar<foo>::stuff();
}
вернет 1 при using namespace ONE
и 2 при using namespace TWO
.
Почему? И есть ли другие "странные" или "неожиданные" взаимодействия между пространствами имен и шаблонами?
Редактировать: В то время это приводило в замешательство, поскольку одни и те же шаблоны использовались в нескольких файлах, каждый using
имел различное пространство имен.