Является ли выделение буфера через new char[sizeof(T)] гарантией выделение памяти, которая правильно выровнена для типа T, где все члены T имеют свою естественную, определенную реализацию, выравнивание (т.е. вы не использовали alignas, чтобы изменить их выравнивание).
Я видел эту гарантию в нескольких ответах здесь, но я не совсем понимаю, как стандарт достигает этой гарантии. 5.3.4-10 стандарта дает основное требование: по существу new char[] должен быть выровнен с max_align_t.
То, что мне не хватает, это бит, который говорит, что alignof(T) всегда будет правильным выравниванием с максимальным значением max_align_t. Я имею в виду, это кажется очевидным, но должно ли получившееся выравнивание структуры быть не более max_align_t? Даже точка 3.11-3 говорит, что расширенные выравнивания могут поддерживаться, поэтому может ли компилятор самостоятельно решить, что класс является перенастраиваемым типом?