Подтвердить что ты не робот

Нет ничего плохого в новом [] массиве байт-объектов, содержащих конструкторы, не так ли?

В моем физически основанном рендерере, я получаю ошибку повреждения памяти (программа вылетает, а отладчик дает фиктивный стек стека, который бесполезен). Я проследил это до SSCCE. Кажется, что строка с конструктором вызывает ошибку:

#include <cstdint>

class Foo final {
    public:
        uint8_t packed;

    public:
        inline Foo(void) : packed(0xFF) {} //causes error
        inline ~Foo(void) = default;
};
static_assert(sizeof(Foo)==sizeof(uint8_t),"Implementation error!");

int main(int /*argc*/, char* /*argv*/[]) {
    Foo* arr = new Foo[4]; //Tried a bunch of different sizes.  All fail.
    delete [] arr;

    return 0;
}

Проблема не возникает для MSVC или GCC, только компилятор Intel (версия которого составляет 16,0). Но, поскольку это ошибка памяти, это ничего не значит. Прежде чем я отправлю отчет об ошибке, может ли кто-нибудь подтвердить это, не я неправильно использую С++?


Здесь - это готовое решение, демонстрирующее проблему. Здесь - сборка.

4b9b3361

Ответ 1

Как указано в комментариях, в серии более простых примеров (и соответствующих изменений) это вполне допустимый код на С++.

Я опубликовал отчет об ошибках на форуме разработчиков Intel, и он был официально подтвержден как таковой.