Ниже приведен фрагмент кода, где я объявляю переменную с именем pval
, которая пытается получить T&&
на T*
[с T
, равным int
]. В соответствии с информацией о типе [декодированной с использованием abi] полученный тип равен int*
.
Но когда я сравниваю тип int*
с decltype(pval)
, он возвращает ноль, а не 1, что означает, что он обрабатывает pval
как другой тип, отличный от int*
. Итак, какой из них неправильный pval
, являющийся int*
, как сообщается typeid
или is_same
, что указывает на сравнение как ложное.
#include<iostream>
#include<string>
#include<typeinfo>
#include<cxxabi.h>
#include<type_traits>
using namespace std;
std::string classname(const std::type_info& info)
{
int status;
char* rslt=abi::__cxa_demangle(info.name(),0,0,&status);
std::string result(rslt);
free(rslt);
return result;
}
int main(int argc, char* argv[])
{
int* ptr = new int(10);
decltype(std::move(ptr)) pval = std::move(ptr);
cout << classname(typeid(pval)) << endl; // as per typeid information the type of pval is int*.
bool isSame = is_same<decltype(pval), int*>::value; // What then is the pval not same as int* as per is_same ?
cout << "isSame status = " << isSame << endl;
cout << is_same<int*, int*>::value << endl;
return(0);
}