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