Search code examples
c++rttitypeinfo

What is `type_info::before` useful for?


According to cplusplus.com, the std::type_info::before() function...

Returns true if the type precedes the type of rhs in the collation order.
The collation order is just an internal order kept by a particular implementation and is not necessarily related to inheritance relations or declaring order.

So what is it useful for?


Solution

  • Consider you want to put your type_info objects as keys into a map<type_info*, value>. The type_info doesn't have an operator < defined, so you must provide your own comparator. The only thing that is guaranteed to work from the type_info interface is the before() function, since neither the addresses of type_info nor the name() must be unique:

    struct compare {
        bool operator ()(const type_info* a, const type_info* b) const {
            return a->before(*b);
        }
    };
    
    std::map<const type_info*, std::string, compare> m;
    
    void f() {
        m[&typeid(int)] = "Hello world";
    }