void Reference::print(std::ostream& out) const {
    out << "(reference) ";
    if (referenceType == Reference::Type::kResource) {
        out << "@";
    } else {
        out << "?";
    }

    if (name.isValid()) {
        out << name;
    }

    if (id.isValid() || Res_INTERNALID(id.id)) {
        out << " " << id;
    }
}
void Reference::print(std::ostream* out) const {
    *out << "(reference) ";
    if (referenceType == Reference::Type::kResource) {
        *out << "@";
        if (privateReference) {
            *out << "*";
        }
    } else {
        *out << "?";
    }

    if (name) {
        *out << name.value();
    }

    if (id && !Res_INTERNALID(id.value().id)) {
        *out << " " << id.value();
    }
}