从nullptr推导出的指向模板类型?

时间:2013-03-03 03:45:34

标签: c++ templates c++11 nullptr

考虑功能:

template <class T> void f(const T* const ptr);

T的{​​{1}}是什么?

1 个答案:

答案 0 :(得分:5)

我不得不回答这个问题。从§2.14.7/ 1(强调我的):

  

指针文字是关键字nullptr。它是std :: nullptr_t类型的prvalue。 [注意:std :: nullptr_t是一个独特的类型,既不是指针类型也不是指向成员类型的指针;相反,这种类型的prvalue是一个空指针常量,可以转换为空指针值或null成员指针值。

T *必须是std::nullptr_t,因为std::nullptr_t 不是指针类型,这是不可能的。尝试在GCC 4.7.2上使用nullptr调用它会发出错误,表明它正在尝试调用f(std::nullptr_t),但只有f(const T *),这与{{1}的事实一致}}不是std::nullptr_t