Форматированные выходные арифметические вставки

У меня есть основной вопрос об арифметических вставках; § 27.7.3.6.2/1 [ostream.inserters.arithmetic]:

Когда val имеет тип bool, long, unsigned long, long long, unsigned long long, double, long double или const void*, преобразование форматирования происходит так, как если бы оно выполняло следующий фрагмент кода:

bool failed = use_facet<
  num_put<charT,ostreambuf_iterator<charT,traits> >
    > (getloc()).put(*this, *this, fill(), val).failed()

Вопрос в том, какая именно функция выполняет преобразование указателя в тип, как поправил Мэтт Макнабб, const void*? Например:

int *ip = new int(1);
std::cout << ip; //0xaa33fa67

Меня не интересуют детали реализации, я просто хотел бы знать, какая функция выдает арифметический результат из указателя. Это put в приведенном выше примере?


person Community    schedule 06.10.2014    source источник
comment
Указатель преобразуется в const void *, а не в long   -  person M.M    schedule 06.10.2014
comment
Преобразование в const void * происходит, когда указатель передается в operator<<(const void *).   -  person T.C.    schedule 06.10.2014
comment
Я понял. Спасибо   -  person    schedule 06.10.2014


Ответы (1)


Существует неявное покрытие от любого не указателя на функцию-член/член до void*. После того, как это передается потоку, он передает его std::num_put::put(), который распечатывает его как общий указатель, как если бы он использовал флаг формата "%p".

person 0x499602D2    schedule 06.10.2014