Mahesh
Mahesh

Reputation: 34655

Strange behaviour of the typeid operator?

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

Answers (2)

templatetypedef
templatetypedef

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

Stack Overflow is garbage
Stack Overflow is garbage

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

Related Questions