Указанный тип шаблона выведен из nullptr?

Учитывая функцию:

template <class T> void f(const T* const ptr);

Что такое T за f(nullptr) ?

5

Решение

Я должен был бы ответить на это с не существует. Из § 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 *,

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]