Operators new and delete can be declared in a class scope. However, the Standard prohibits declarations of these operators in a namespace. Why is this? Consider the following example:
char *pc; namespace A { void operator new ( size_t ); void operator delete ( void * );void func () { pc = new char ( 'a');}}void f() { delete pc; } // which version of delete to call, A::delete or standard delete?
Some programmers would expect the operator A::delete to be selected since it matches the operator new that was used to allocate the storage. Others would expect the standard operator delete to be called since A::delete is not visible in function f. By prohibiting declarations of new and delete in a namespace, you can avoid this hassle.