C++ 简单类型说明符不支持nullptr类型

C++ 简单类型说明符不支持nullptr类型,c++,templates,c++11,C++,Templates,C++11,我希望有一个函数fn,它接受指向const和非const对象的指针集。我正在写一个模板来做这件事 template<typename T1, typename T2, std::enable_if<std::is_same<T1,NodeType *>::value && std::is_same<T2,EdgeType *>::value, std::nullptr_t>::type = nullpt

我希望有一个函数
fn
,它接受指向
const
和非
const
对象的指针集。我正在写一个模板来做这件事

template<typename T1,
         typename T2,
         std::enable_if<std::is_same<T1,NodeType *>::value && std::is_same<T2,EdgeType *>::value, std::nullptr_t>::type = nullptr>
static void fn(unordered_set<T1> &nodeSet, unordered_set<T2>& edgeSet);
模板
静态无效fn(无序集和节点集、无序集和边集);
在上面的示例中,我希望能够传递
无序集
以及
无序集
(simliar with
EdgeType
)。但是,我得到一个错误:
简单类型说明符不支持“nullptr类型”
。有人能帮忙吗?

除了您缺少的一些
typename
之外,要实现这一点,您应该使用
std::remove\u const
std::remove\u pointer
类型特征:

template<typename T1, typename T2,
  typename std::enable_if<
   std::is_same<typename std::remove_const<typename std::remove_pointer<T1>::type>::type, NodeType>::value &&
   std::is_same<typename std::remove_const<typename std::remove_pointer<T2>::type>::type, EdgeType>::value,
   typename std::nullptr_t>::type = nullptr>
static void fn(std::unordered_set<T1> &nodeSet, std::unordered_set<T2>& edgeSet);
template::type=nullptr>
静态无效fn(标准:无序集和节点集,标准:无序集和边集);

,int>替换
,std::nullptr\u t>::type=nullptr
:type=0
我确实想到了这一点。但是你能告诉我为什么
nullptr
不起作用吗?这个错误一点帮助都没有,但是你只是缺少了一个
typename
。我最后把它保留为T1和T2,并添加了一个静态断言。一种方法比另一种好/坏吗?另外,我在某处读到,模板参数上的cv限定符被忽略了。我显然误解了。你能告诉我这是什么意思吗?在第一个问题上,一切都是在编译时确定的,因此在第二个问题上,两种解决方案中的任何一种听起来都与我相同: