any: avoid declaring nested types in an union

This commit is contained in:
Michele Caini
2022-09-06 23:41:45 +02:00
parent 0c062cc351
commit 871234ec76

View File

@@ -54,6 +54,10 @@ class basic_any {
using policy = internal::any_policy;
using vtable_type = const void *(const operation, const basic_any &, const void *);
struct storage_type {
alignas(Align) std::byte data[Len + !Len];
};
template<typename Type>
static constexpr bool in_situ = Len && alignof(Type) <= Align && sizeof(Type) <= Len &&std::is_nothrow_move_constructible_v<Type>;
@@ -407,9 +411,7 @@ public:
private:
union {
const void *instance;
struct storage_type {
alignas(Align) std::byte data[Len + !Len];
} storage;
storage_type storage;
};
const type_info *info;
vtable_type *vtable;