NanoRange icon indicating copy to clipboard operation
NanoRange copied to clipboard

Add an implementation of std::variant

Open tcbrindle opened this issue 6 years ago • 2 comments

This PR adds Michael Park's variant implementation, and uses it in common_iterator (unless we're compiling with C++17, in which case std::variant is used).

This shrinks common_iterator a little, but at the cost of potentially worse codegen for various functions: in particular, operator==() gets routed through std::visit, which may not optimise all that well.

There's also the fact that MPark.Variant is absolutely huge -- at around 3kloc, it's about 20% the size of the whole of NanoRange at present. If it were just for common_iterator, I probably wouldn't bother; but we may be able to reuse it to implement semiregular, and thus avoid having to drag in an equally-large optional implementation from somewhere.

tcbrindle avatar Feb 07 '19 16:02 tcbrindle