機能を考えると:
template <class T> void f(const T* const ptr);
何T
のためf(nullptr)
ですか?
私はこれに答えなければならないでしょう。§2.14.7/1から(強調鉱山):
ポインタリテラルはキーワードnullptrです。これは、タイプstd::nullptr_tのprvalueです。[注:std :: nullptr_tは、ポインター型でもメンバー型へのポインターでもない別個の型です。むしろ、このタイプのprvalueはnullポインター定数であり、nullポインター値またはnullメンバーポインター値に変換できます。
T *
である必要がstd::nullptr_t
あり、std::nullptr_t
はポインタ型ではないため、それは不可能です。GCC 4.7.2でそれを呼び出そうとすると、呼び出しようとしてnullptr
いたことを示すエラーが発生しますがf(std::nullptr_t)
、があっただけです。これは、aがではないf(const T *)
という事実と一致します。std::nullptr_t
T *