C ++编译错误:模板类型为remove_pointer <T>

时间:2019-06-15 00:35:53

标签: c++ templates

std :: remove_pointer :: type>()不适用于模板类型T。

这是我使用的一小段代码。

#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

0 个答案:

没有答案