std :: remove_pointer
这是我使用的一小段代码。
#include <iostream>
#include <type_traits>
template <class T>
void bar(T x){
std::cout << std::is_same<int*, T>() << '\n'; // true
std::cout << std::is_same<int, std::remove_pointer<int*>::type>() << '\n'; // true
std::cout << std::is_same<int, std::remove_pointer<T>::type>() << '\n'; // compilation fail
};
int main(){
int p[5];
p[0] = 17;
bar(p);
return 0;
}
当我尝试编译时,出现以下错误: 错误:“模板结构std :: is_same”的模板参数列表中参数2的类型/值不匹配 std :: cout << std :: is_same :: type>() 注意:需要一个类型,得到了'std :: remove_pointer :: type'
如您所见, int * 蚂蚁 T 具有相同的类型,因此第一个输出为true;如果我将remove_pointer与一起使用,则效果很好,因此第二个输出也为true。但是最后的输出不会编译。 标志为:-Wall -fexceptions -std = c ++ 14 -g -std = c ++ 11