// Test whether N::operator new is different from ::operator new
#include <new>
#include <cstdlib>

bool success;

namespace N{
  void* operator new(size_t n){
    success = true;
    return std::malloc(n);
  }
}

void *operator new(size_t n)throw(std::bad_alloc)
{
  static bool entered = false;
  if(entered)
    throw std::bad_alloc();
  entered = true;
  void *result = N::operator new(n);
  entered = false;
  return result;
}

int main()
{
  try{
    new int;
  }catch(...){
    return 1;
  }
  return success?0:1;
}
