`zserio::BasicOptional` doesn't provide at least conversion move constructor and conversion move assignment operator: ``` template <typename A, typename U> zserio::BasicOptional& BasicOptional(BasicOptional<A, U>&& other); // missing template <typename A, typename U> zserio::BasicOptional& operator=(BasicOptional<A, U>&& other); // missing ``` Consider if it's worth to implement those and check what else is deviating from std::optional and consider to implement it.