34 template <
typename T, std::
size_t N >
39 std::has_virtual_destructor_v< T >,
40 "Type stored in derived_storage has to have a virtual destructor" );
51 template < std::derived_from< T > U >
55 static_assert( is_storable_with_align< U >(
N ) );
56 ptr_ =
align( ptr_,
alignof( U ) );
57 std::construct_at( ptr_, std::forward< U >( item ) );
88 return ptr_ !=
nullptr;
103 std::destroy_at( ptr_ );
Definition: derived_storage.h:36
T * operator->()
Definition: derived_storage.h:76
derived_storage()
Definition: derived_storage.h:46
~derived_storage()
Definition: derived_storage.h:101
T & operator*()
Definition: derived_storage.h:66
T base_type
Definition: derived_storage.h:44
std::byte[N] storage_type
Definition: derived_storage.h:42
T const * operator->() const
Definition: derived_storage.h:81
derived_storage & operator=(derived_storage &&)=delete
T const & operator*() const
Definition: derived_storage.h:71
derived_storage(derived_storage const &)=delete
derived_storage(derived_storage &&)=delete
T & get()
Definition: derived_storage.h:91
derived_storage(U &&item)
Definition: derived_storage.h:52
T const & get() const
Definition: derived_storage.h:96
derived_storage & operator=(derived_storage const &)=delete
void * align(void *const ptr, std::size_t const alignment)
TODO: this needs tests.
Definition: util.h:41
MIT License.
Definition: impl.h:31
N
Definition: static_storage.h:97
physical_quantity< 0, 0, 0, 0, 0, 0, 0, 0, 1 > byte
Definition: physical_quantity.h:118