A type-safe union based loosely on std::variant. This flavor of variant requires that all the types in the declaring template parameter pack be unique. Attempting to use the value of aGet()when the underlying type is different leads to undefined behavior.