sob., 2 mar 2019 o 13:18 Andrzej Krzemienski
napisał(a):
Hi Peter,
Given that the never-empty guarantee appears to be at the heart of the
motivation for boost::variant2, I would suggest to:
1. put in the documentation some motivation behind pursuing the
never-empty guarantee.
2. Make it clear that never-empty guarantee is not a strong
exception-safety guarantee.
3. Describe the algorithm for achieving the guarantee.
Somewhat related to that. When I try to study the documentation to see what
the assignment guarantees, I get this:
constexpr variant& operator=( const variant& r )
noexcept( mp_all::value );
-
Let j be r.index().
Effects:
-
If index() == j, assigns the value contained in r to the value
contained in *this.
-
Otherwise, equivalent to emplace<j>(get<j>(r)).
I am interested in the latter ("Otherwise") case, so, going to emplace:
template
constexpr variant_alternative_t>&
emplace( A&&... a );
- Requires:
I < sizeof(T…).
Effects:
Destroys the currently contained value, then initializes a new contained
value as if using the expression Ti(std::forward<A>(a)…).
This doesn't mention any double buffering. No tricks, no "monostate". It
reads as if the variant is left with no contained object whatsoever.
Regards,
Andrzej