要将问题翻译成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似乎不同意?