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

Vin*_*ent 5 c++ templates nullptr c++11

考虑到功能:

template <class T> void f(const T* const ptr);
Run Code Online (Sandbox Code Playgroud)

什么是Tf(nullptr)

chr*_*ris 5

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

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

T *将必须std::nullptr_t并且由于std::nullptr_t指针类型,这是不可能的.试图nullptr在GCC 4.7.2上调用它会给出一个错误,表明它正在尝试调用f(std::nullptr_t),但只有一个f(const T *),这与a std::nullptr_t不是a 的事实一致T *.