class foo
{
public:
void say_type_name()
{
std::cout << typeid(this).name() << std::endl;
}
};
int main()
{
foo f;;
f.say_type_name();
}
<
Because it is a pointer to foo. And foo has 3 characters. So it becomes P3foo
. The other one has type foo
, so it becomes 3foo
. Note that the text is implementation dependent, and in this case GCC just gives you the internal, mangled name.
Enter that mangled name into the program c++filt
to get the unmangled name:
$ c++filt -t P3foo
foo*