Нарушает ли инкапсулированный массив символов, используемый в качестве объекта, строгое правило наложения

Разве следующий класс нарушает строгое правило псевдонимов:

template<typename T>
class store {
    char m_data[sizeof(T)];
    bool m_init;
public:
    store() : m_init(false) {}
    store(const T &t) : init(true) {
        new(m_data) T(t);
    }
    ~store() {
        if(m_init) {
            get()->~T();
        }
    }
    store &operator=(const store &s) {
        if(m_init) {
            get()->~T();
        }
        if(s.m_init) {
            new(m_data) T(*s.get());
        }
        m_init = s.m_init;
    }
    T *get() {
        if (m_init) {
            return reinterpret_cast<T *>(m_data);
        } else {
            return NULL;
        }
    }
}

Мое чтение стандарта состоит в том, что он неверен, но я не уверен (я использую массив объектовT + некоторые метаданные этих объектов, но для контроля над конструкцией / деконструкцией объекта без выделения памяти вручную), поскольку выделенные объекты используются в качестве примеров для размещенияnew в стандарте.

Ответы на вопрос(2)

Ваш ответ на вопрос