newを場所に応じて使い分けることってできんのだろうか?

なんとかnewを、場所に応じて使い分けることができんものかと、試行錯誤をしてみたのですが、どうにもうまくいかない。

#include <iostream>

namespace WKPN1{
	void* operator new(size_t size) throw() { 
		using namespace std;
		cout << "wkpn1" << size << endl;
		return malloc(size); 
	} 
} 

namespace WKPN2{
	void* operator new(size_t size) throw() { 
		using namespace std;
		std::cout << "wkpn2" << size << endl;
		return malloc(size); 
	} 
} 

class Hoge{
	public:
		Hoge(){
			using namespace std;
			std::cout << "hoge constructor" << endl;
		}
		~Hoge(){
		}
};

int main(){
	{
		using namespace WKPN1;
		new Hoge();
	}
	{
		using namespace WKPN2;
		new Hoge();
	}
}

とやってみたもののg++では
32行目と36行目で、call of overloaded 'operator new(unsigned int)' is ambiguous
っと文句言われてしまう。
どうやら、デフォルトのnewなのか、こっちの用意したnewなのか区別がつかないらしい。

また、コンパイラによっては、そもそもoperator newをネームスペースの中に入れられなかったりするようだ。びっくり。

なんか、方法はありそうな気がするんだけれども…。うむむ…。