Opened 5 years ago
#13208 new Feature Requests
Make boost::optional<T> trivially destructible, copyable and movable if T is
| Reported by: | Owned by: | Fernando Cacciola | |
|---|---|---|---|
| Milestone: | To Be Determined | Component: | optional |
| Version: | Severity: | Not Applicable | |
| Keywords: | Cc: |
Description
Conceptually there's nothing preventing boost::optional<T> from being trivially destructible, copyable and movable if T is.
This could be useful, for instance, to use an boost::optional<T> as a union-member.
I have a POC implementation based on Boost 1.64 here.
I moved m_storage and m_initialized to a new class optional_storage, representing the new base class. Some methods managing those members are move there as well.
optional_base indirectly inherits from optional_storage through optional_destroyer, optional_mover and optional_copier, which are templated classes including a boolean parameter to determine whether T is trivially destructible, movable and copyable and use template specialization to provide the respective trivial members.
The implementation relies on defaulting constructors, so without C++11 or newer only trivial destruction is possible.
