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.