Подтвердить что ты не робот

Может ли nullptr использоваться как переменный аргумент (varargs)?

Могу ли я использовать ключевое слово nullptr в качестве аргумента для переменной функции? Если да, то он подвергается какому-либо стандартным преобразованиям и каков тип результирующего значения?

Конкретно, верно следующее:

std::printf("%p", nullptr);

Или это должно быть:

std::printf("%p", static_cast<void *>(nullptr));
4b9b3361

Ответ 1

§5.2.2p7 Если параметр для данного аргумента отсутствует, аргумент передается таким образом, что получающая функция может получить значение аргумента, вызвав va_arg (18.10).)... Аргумент, который имеет (возможно, cv-qualified) тип std::nullptr_t, преобразуется в тип void* (4.10)...

Ответ 2

В стандарте указано, что любой аргумент типа nullptr_t будет преобразован в void* при сопоставлении .... Таким образом, звонок правильный без актерского состава.

EDIT:

Из стандарта (§5.2.2/7):

Если для данного аргумента нет параметра, аргумент равен передается таким образом, что принимающая функция может получить значение аргумента, вызвав va_arg. lvalue-to-rvalue, от массива до указателя и от функции к указателю стандартные преобразования выполняются по выражению аргумента. Аргумент, который имеет (возможно, cv-квалифицированный) тип std::nullptr_t преобразуется в тип void*.