types/tagged: prefer variadic alignas over explicit calculation
This reduces the scope for constant integral expression errors under GCC 9
This commit is contained in:
parent
577d7f5887
commit
3c78e19c99
@ -41,8 +41,6 @@ namespace cruft {
|
|||||||
using first_t = cruft::tuple::type::nth_t<tuple_t,0>;
|
using first_t = cruft::tuple::type::nth_t<tuple_t,0>;
|
||||||
using tag_t = std::decay_t<decltype (first_t::tag)>;
|
using tag_t = std::decay_t<decltype (first_t::tag)>;
|
||||||
|
|
||||||
static constexpr auto alignment = max (alignof (ValueT)...);
|
|
||||||
|
|
||||||
/// All child types should have identical tag types
|
/// All child types should have identical tag types
|
||||||
static_assert ((std::is_same_v<tag_t, std::decay_t<decltype(ValueT::tag)>> && ...));
|
static_assert ((std::is_same_v<tag_t, std::decay_t<decltype(ValueT::tag)>> && ...));
|
||||||
|
|
||||||
@ -121,7 +119,7 @@ namespace cruft {
|
|||||||
tag_t m_tag;
|
tag_t m_tag;
|
||||||
|
|
||||||
/// The storage area for all desired types.
|
/// The storage area for all desired types.
|
||||||
alignas (alignment) std::byte m_data[
|
alignas (alignof (ValueT)...) std::byte m_data[
|
||||||
cruft::max (sizeof (ValueT)...)
|
cruft::max (sizeof (ValueT)...)
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user