I have an expr_t base class, from which ident_t is derived. I wrote some to_string overloads to display differently between expr_t and ident_t:
#include <iostream>
#include <string>
struct expr_t {
virtual ~expr_t() {}
};
struct ident_t : public expr_t {
std::string name;
ident_t(std::string name) : name(name) {}
};
std::string to_string(expr_t& v) {
if (auto* id = dynamic_cast<ident_t*>(&v)) {
return to_string(*id);
}
return "error";
}
std::string to_string(ident_t& v) {
return v.name;
}
int main() {
expr_t* b = new ident_t("c");
std::cout << to_string(*b) << std::endl; // segfault
delete b;
return 0;
}
However, no output is generated and seg-fault occurs when debugging with GDB.