使用带有reinterpret_cast()的typename

时间:2018-02-05 00:26:53

标签: c++ c++14 reinterpret-cast typename

如何创建reinterpret_cast结果的typename?

例如,

template<typename T1> class node{

public:

using null_sp2node = typename reinterpret_cast<shared_ptr<node<T1>>>(NULL);

};

以上生成以下编译器错误:

  

错误:在&#39; typename&#39;

之后需要一个合格的名称

1 个答案:

答案 0 :(得分:3)

reinterpret_cast会返回,而不是类型。具体来说,这是一个表达。如果要获取表达式的类型,正确的工具是decltype

using null_sp2node = decltype(reinterpret_cast<shared_ptr<node<T1>>>(NULL));

但是,因为reinterpret_cast<T>的结果是T类型的表达式,所以与仅仅相比,实际上没有任何意义:

using null_sp2node = shared_ptr<node<T1>>;

当然,由于reinterpret_cast<shared_ptr<node<T1>>>(NULL)一开始就是形成的,所以它并不重要。你不能reinterpret_cast空指针常量到非指针类型(某些整数类型除外)。