Учитывая функцию:Указанный тип шаблона, выводимый из nullptr?
template <class T> void f(const T* const ptr);
Что такое T
для f(nullptr)
?
Учитывая функцию:Указанный тип шаблона, выводимый из nullptr?
template <class T> void f(const T* const ptr);
Что такое T
для f(nullptr)
?
Я должен был бы ответить на это, если нет. Из § 2.14.7/1 (акцент мой):
Литеральный указатель - это ключевое слово nullptr. Это prvalue типа std :: nullptr_t. [Примечание: std :: nullptr_t - это отдельный тип, который равен ни тип указателя, ни указатель на тип члена; скорее, prvalue этого типа является константой нулевого указателя и может быть преобразовано в значение нулевого указателя или значение указателя нулевого элемента.
T *
должен быть std::nullptr_t
и так std::nullptr_t
является не тип указателя, который не представляется возможным. Попытка позвонить ему с nullptr
на GCC 4.7.2 дает ошибку, указывающую на то, что она пыталась позвонить f(std::nullptr_t)
, но имела только f(const T *)
, что согласуется с тем, что std::nullptr_t
не является T *
.