我遇到了一個編譯..奇怪?最近這讓我相信創建模板時會創建與聲明位置相同的命名空間(或至少相同的命名空間)。那是;模板/命名空間互動
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
。
爲什麼?命名空間和模板之間還有其他「奇怪」或「意外」的相互作用嗎?
編輯:這當時令人困惑,因爲在多個文件中使用相同的模板,每個文件都使用不同的名稱空間。
這並不是所有的「奇怪」。 '使用namespace ONE'將等同於'bar :: stuff()',並按預期工作。 –
2010-02-12 02:03:41
我一定錯過了什麼?這對我來說似乎是正確的?酒吧是酒吧或酒吧是不是。所以這些數字似乎正確? –
2010-02-12 02:05:41