Fun C++ fact: definition
void *operator new(std::size_t size, std::nothrow_t ¬hrow) throw() { ... }
does not override the global nothrow operator new. The standard nothrow operator new would still be called when this definition is present. Because, well, the second parameter (std::nothrow_t ¬hrow) is missing a const qualifier, so it's a completely different function. In fact, temporary of type std::nothrow_t would never be bound to a non-const reference at all. So the custom operator defined above is also very hard to call.
This patch fixes the test case. The analyzer behavior is intended (at least for now, see also discussion in D41406) regardless of whether the operator is overridden correctly or not, but tests now actually test it.
Double negation can be simplified a bit: #if !LEAKS || ALLOCATOR_INLINING