This is an implementation of a C++ variant
class, matching the C++17 draft http://wg21.link/n4606
The default constructor default-constructs the first type. If the first type isn't default-constructible then there is no default constructor.
If a copy or move or emplace assignment operation throws then the variant is put
in a special "valueless by exception" state, which can be queried with
valueless_by_exception()
.
It has been tested with gcc 6.1.1-2ubuntu12~16.04 and clang 3.8.0-2ubuntu4 on Ubuntu Linux.
It is provided as a single header file released under the BSD license.
Copyright (c) 2015-2016, Just Software Solutions Ltd