A C++ variant library (like Boost.Variant) using C++11 variadic templates