タイプが参照型である場合typeid
オペレータは、参照タイプの作業、
§5.2.8/ 4-5
は、結果が表すstd::type_info
オブジェクトを参照しないので参照型。すべての場合において
は、CV-修飾子は、あなたは、CV-修飾子と参照型や型の名前を見つけるために、いくつかのラッパーを書くことができます(つまり、typeid(T)==typeid(const T)
ある)
型IDによって無視されます。
template<typename T>
struct typeid_hlp
{
static std::string name() { return typeid(T).name(); }
};
template<typename T>
struct typeid_hlp<T&>
{
static std::string name() { return typeid_hlp<T>::name() + std::string(" &"); }
};
template<typename T>
struct typeid_hlp<T&&>
{
static std::string name() { return typeid_hlp<T>::name() + std::string(" &&"); }
};
template<typename T>
struct typeid_hlp<const T>
{
static std::string name() { return std::string("const ") + typeid_hlp<T>::name(); }
};
template<typename T>
struct typeid_hlp<volatile T>
{
static std::string name() { return std::string("volatile ") + typeid_hlp<T>::name(); }
};
と参照を取り除きtypeid`
int main()
{
std::cout << typeid_hlp<int>::name() << std::endl; // int
std::cout << typeid_hlp<int&>::name() << std::endl; // int &
std::cout << typeid_hlp<const int>::name() << std::endl; // const int
std::cout << typeid_hlp<volatile const int * const &>::name() << std::endl; // const int const volatile * __ptr64 &
}
'、すなわち'型ID(INT&)==型ID(INT) 'のようにそれを使用します。本当の質問は、なぜあなたはこれをしたいのですか?それを(つまり、いくつかのMVCE)提供した場合、それが期待どおりに動作していない理由を診断することができます。しかし、今のところ、すべてが期待どおりであると思われます。 – GManNickG