Представляю вашему вниманию уникальный генератор уникальных числовых идентификаторов для любых типов. Работает даже при раздельной компиляции:
template<class T> class UniqueId
{
public:
static const std::size_t value;
private:
static void func_id() {}
};
template<class T> const std::size_t UniqueId<T>::value = reinterpret_cast<std::size_t>(UniqueId<T>::func_id);