为什么变量的TypeID不等于衰减类型的TypeID?

时间:2017-03-15 22:58:09

标签: c++ generic-programming

要将问题翻译成C ++代码,为什么不

typeid(T) == typeid(typename std::decay<T>::type)

总是评价为真? (在我的测试中,有时它确实如此,有时它不会。)

根据typeid documentation ...

  

[typeid is]用于必须知道多态对象的动态类型和静态类型识别的地方。

documentation for decay提供了这个程序:

#include <iostream>
#include <type_traits>

template <typename T, typename U>
struct decay_equiv : 
std::is_same<typename std::decay<T>::type, U>::type 
{};

int main()
{
    std::cout << std::boolalpha
          << decay_equiv<int, int>::value << '\n'
          << decay_equiv<int&, int>::value << '\n'
          << decay_equiv<int&&, int>::value << '\n'
          << decay_equiv<const int&, int>::value << '\n'
          << decay_equiv<int[2], int*>::value << '\n'
          << decay_equiv<int(int), int(*)(int)>::value << '\n';
}

输出是:

true
true
true
true
true
true

因此,如果is_same元函数表示它们的类型相同,那么为什么typeid似乎不同意?

0 个答案:

没有答案