emulate new and delete with placement new for alignment

  c++, c++11

Below code allocates aligned memory. However, static checkers are rightly complaining about new and not matching with delete but rather with free in below case. To fix the static checkers complain I removed CURRENTLY_WORKING_CODE macro below.
But that is causing crash and I know the reason why. Is there any way to get rid of static checkers warnings?

Please don’t suggest any other way of allocating aligned memory. I looked into this post but couldn’t figure out best way to use that.

If it is really required than I am ready to also go with a specific compiler.

#include <assert.h>
#include <iostream>
#include <cstdlib>
#include <stdint.h>
#include <cstring>

void* operator new  (size_t n);
void* operator new[](size_t n);
void* operator new  (size_t n, int alignment);
void* operator new[](size_t n, int alignment);
template <typename T>
T* aligned_malloc(size_t n, int alignment) {
    return new (alignment) T[(size_t)n];
template <typename T>
void aligned_free(T *p, int x) {
    for (size_t i = 0; i < x; i++) {
void* malloc_aligned(size_t n, int alignment) {
    void* mem = nullptr;
    if (posix_memalign(&mem, static_cast<size_t>(alignment), n)) {
        printf("Fatal : couldn't allocate %zd bytesn", n);
    return mem;
void* operator new(size_t n) {
    return malloc_aligned(n, 16);
void* __attribute__((weak)) operator new(size_t n, int alignment) {
    return malloc_aligned(n, alignment);
void* operator new[](size_t n) {
    return malloc_aligned(n, 16);
void* operator new[](size_t n, int alignment) {
    return malloc_aligned(n, alignment);
//not shown entire code
template <typename T>
class AlignedArray {
        AlignedArray():m_vElem(0),m_nElem(0),m_owner(true) {  }
        AlignedArray(int nElem):m_vElem(0), m_owner(true) { alloc(nElem); }
        AlignedArray(int nElem, int alignment):m_vElem(0), m_owner(true) { alloc(nElem, alignment); }
        ~AlignedArray() { 
            if(m_owner && m_vElem) {
        void alloc(int nElem, int alignment = 8) {
            m_nElem = nElem;
            m_vElem = new (alignment) T[(size_t)nElem];
            m_vElem = aligned_malloc<T>(nElem, alignment);
        void free() {
            delete []m_vElem;
            aligned_free(m_vElem, m_nElem);
            m_vElem = nullptr;
            m_nElem = 0;
        T*   m_vElem;
        int  m_nElem;
        bool m_owner;
typedef struct def {
    int x;
    AlignedArray<int> xyz;
} def;
typedef struct abc {
    int x;
    AlignedArray<def> xyz;
} abc;
int main() {
    AlignedArray<abc> x(1);

Source: Windows Questions C++