The C++ standard states, regarding the std::aligned_storage
template, that
Align
shall be equal toalignof(T)
for some typeT
or to default-alignment.
Does that mean that there must be such a type in the program, or that it must be possible to make such a type? In particular, the possible implementation suggested on cppreference is
template<std::size_t Len, std::size_t Align /* default alignment not implemented */>
struct aligned_storage {
typedef struct {
alignas(Align) unsigned char data[Len];
} type;
};
It seems like this makes a type with that alignment, if possible (that is, if Align
is a valid alignment). Is that behavior required, or is it undefined behavior to specify an Align
if such a type does not already exist?
And, perhaps more importantly, is it plausible in practice that the compiler or standard library would fail to do the right thing in this case, assuming that Align
is at least a legal alignment for a type to have?
Aucun commentaire:
Enregistrer un commentaire