Typeinfo
#include <iostream>
#include <string>
#include <vector>
#include <typeinfo>
#include <functional>

int main(int argc, char *argv[])
{
	//name
	std::cout<<typeid(int).name()<<std::endl;
	std::cout<<typeid(float).name()<<std::endl;
	std::cout<<typeid(double).name()<<std::endl;

	std::string name = "Lin Chen";
	std::cout<<typeid(name).name()<<std::endl;

	std::vector<int> intContainer;
	std::vector<std::string> stringContainer;
	std::cout<<typeid(intContainer).name()<<std::endl;
	std::cout<<typeid(stringContainer).name()<<std::endl;

	//hash_code, returns the same value for any two type_info objects that compare equal
	int n;
	std::cout<<typeid(int).hash_code()<<std::endl;
	std::cout<<typeid(n).hash_code()<<std::endl;

	return 0;
}
			
Reference