Ежедневный бит (е) C ++ # 200, Инструменты запросов и информации о типах во время выполнения: typeid и std:: type_info.

Оператор typeid может применяться к типам и выражениям и возвращает ссылку на объект std::type_info, представляющий тип (выражения).

При применении к полиморфным типам (за исключением процессов построения и уничтожения) оператор typeid вычисляет выражение и возвращает динамический тип выражения.

#include <iostream>
#include <typeinfo>

// Get an implementation defined name of this type:
std::string_view int_name = typeid(int).name();
// On GCC: "i"

// Same for an expression:
std::string_view double_name = typeid(3+2.1).name();
// On GCC: "d"


struct Base {
    virtual void make_me_polymorphic() {}
};

struct Derived : Base {};

void inspector(Base& b) {
    // Base is a polymorphic type (constains a virtual method)
    if (typeid(b) == typeid(Base)) {
        std::cout << "Called with Base.\n";
    } else {
        std::cout << "Called with Derived.\n";
    }
}
  
Base x;
inspector(x); // prints: "Called with Base"
Derived y;
inspector(y); // prints: "Called with Derived"

Откройте пример в Compiler Explorer.