А можно ли к UB в компиляторе относиться также, как к UB в пользовательском коде? Ведь по сути, UB это возможность для имплементаторов компилятора сделать что-то оптимальнее, а при реализации компилятора, авторы сами понимают, что здесь будет происходить К примеру, в коде STL MSVS можно найти пример, как в конце объекта размещают union { T obj; }, чтобы гарантировать выравнивание и возможность взять адрес, а затем создают по этому адресу целый массив. В пользовательском коде такое действие привело бы к разрушению объекта, в котором содержится union
А можно ли к UB в компиляторе относиться также, как к UB в пользовательском коде? Ведь по сути, UB это возможность для имплементаторов компилятора сделать что-то оптимальнее, а при реализации компилятора, авторы сами понимают, что здесь будет происходить
К примеру, в коде STL MSVS можно найти пример, как в конце объекта размещают union { T obj; }, чтобы гарантировать выравнивание и возможность взять адрес, а затем создают по этому адресу целый массив. В пользовательском коде такое действие привело бы к разрушению объекта, в котором содержится union