inline char const* to_cstr (#x:type-name  v)
{
  switch(v)
  {
    #x:enum-field-to-string
  }
  return "";
}

inline std::string to_string (#x:type-name  v)
{
  return to_cstr (v);
}

template <typename Char, typename Traits>
inline std::basic_ostream<Char, Traits> &
operator << (std::basic_ostream<Char, Traits>& os, #x:type-name  v)
{
  return os << to_cstr (v);
}
