Biorąc pod uwagę funkcję:Wskazany typ szablonu wydedukowany z nullptr?
template <class T> void f(const T* const ptr);
Co jest T
dla f(nullptr)
?
Biorąc pod uwagę funkcję:Wskazany typ szablonu wydedukowany z nullptr?
template <class T> void f(const T* const ptr);
Co jest T
dla f(nullptr)
?
Będę musiał odpowiedzieć na to, ponieważ nie ma żadnego. Od § 2.14.7/1 (podkreślenie moje):
Literał literowy jest słowem kluczowym nullptr. Jest to prvalue typu std :: nullptr_t. [Uwaga: std :: nullptr_t jest odrębnym typem, który jest ani wskaźnikiem typu, ani wskaźnikiem do typu elementu; raczej prwartością tego typu jest stała wskaźnika pustego i może zostać przekonwertowana na wartość wskaźnika pustego lub wartość wskaźnika elementu zerowego.
T *
musiałby być std::nullptr_t
a od std::nullptr_t
jest nie typu wskaźnik, który nie jest możliwe. Próba wywołania go pod numerem nullptr
w GCC 4.7.2 powoduje błąd wskazujący, że próbował wywołać f(std::nullptr_t)
, ale miał tylko f(const T *)
, co jest zgodne z tym, że std::nullptr_t
nie jest .