Listing 1: Definition of class variant0_t

struct variant0_t
{
  variant0_t():data(NULL){}

  template<typename T> variant0_t(const T& v)
   : data ( &v ) {}

  template<typename T> operator T () const
  { return * reinterpret_cast<const T*>(data); }

  const void* data ;
} ;