add include guard
get should return reference instead of pointer
initialize variants using default constructor