std::string print_constant(const Constant& c) { std::ostringstream str; switch (c.index()) { case TYPE_INDEX_DIMENSION: str << "dimension: " << get_constant<dimension_index>(c); return str.str(); break; case TYPE_INDEX_INTMP: return Types::Intmp::get(c).get_str(); break; case TYPE_INDEX_SPECIAL: str << "special<" << get_constant<Special>(c) << ">"; return str.str(); break; case TYPE_INDEX_USTRING: str << "\"" << utf32_to_utf8(Types::String::get(c)) << "\""; return str.str(); break; case TYPE_INDEX_CALC: return "calc"; break; case TYPE_INDEX_DEMAND: return "demand"; break; case TYPE_INDEX_INTENSION: return "intension"; break; default: str << "unknown of index " << c.index(); return str.str(); break; } }