Reputation: 34655
Using XCode 3.2.3 (64-bit), I get following strange output. What am I doing wrong?
#include <iostream>
#include <typeinfo>
struct student {
};
int main()
{
int i;
student obj;
std::cout << typeid(i).name() << "\n";
std::cout << typeid(obj).name() << "\n";
return 0;
}
Output:
i
7student
Upvotes: 3
Views: 1255
Reputation: 373172
The name()
member function of the type_info
struct is implementation-specific. There's no guarantee whatsoever that it will try to return something that matches what it says in the original program. In fact, the C++ ISO standard (18.5.1.7) actually says that this function returns "an implementation-defined NTBS" (null-terminated byte string). If it wanted to, it could have this always return the string "neener neerer I won't tell you the name of this type." This contrasts with Java's Class<?>
type, which has very strict restrictions on what it can and cannot return.
If you’d like to convert the name from std::type_info
into something more human, readable, check this other question for details.
Upvotes: 8
Reputation: 248219
What's going on is nothing special. Just that typeid
doesn't promise to return the "original" name of the type, but just a name.
The function returns an implementation-defined string, which, if you're lucky, is recognizable, but it makes no promise of that.
Upvotes: 4