
On 2/22/19 9:48 AM, Peter Dimov via Boost wrote:
I'd like to request a formal Boost review for the Variant2 library, https://github.com/pdimov/variant2. Variant2 contains an implementation of a variant<T...> type that is an almost conforming std::variant, except it doesn't require C++17 and supports C++11 and above.
It's also never valueless and has a few other extensions.
The same library also contains an expected<T, E...> type, which is like the proposed std::expected<T, E>, but supports more than one error type. expected<> is not yet production-ready and has no test suite, but I will finish it if the library is accepted.
I see optional, expected, outcome and .. (monad?) as just special cases of variant. for example template<typename T> using optional = variant<false_type, T>; Why is it necessary to have all these types separately implemented? Can't there be some sort of "base" type which can be used to implement all these others? Wouldn't this approach make things much simpler to review, maintain, and use? Robert Ramey