singalen: (2002)
[personal profile] singalen
Подарки от Вовы Мутеля - этот и следующий пост. Отсюда.
Задача - дана программа:
#include <iostream>
#include <sstream>
using namespace std;

#define SFORMAT(e) ((dynamic_cast<const ostringstream&>(ostringstream() << e)).str())

int main(int argc, char* argv[])
{
        cout << SFORMAT("2 x " << " 2 = " << 2*2);
        return 0;
}
Никто не спрашивает, что распечатается в результате. Если вы можете это сказать, то вы не Страуструп - вы Господь Бог.
Вопрос: почему первый const char* распечатывается как указатель, а не так, как надо?
Я пока не смог.
Вове ответил некий истинный гуру из Apple.

(no subject)

2/2/06 08:25 (UTC)
Posted by [identity profile] fxfuzzy.livejournal.com
в результате дебага выяснилось следующее:
первый параметр выводится в

_Myt& std::basic_ostream::operator<<(const void *_Val).

второй - уже в

template inline
basic_ostream
[Error: Irreparable invalid markup ('<char,>') in entry. Owner must fix manually. Raw contents below.]

в результате дебага выяснилось следующее:
первый параметр выводится в

_Myt& std::basic_ostream::operator<<(const void *_Val).

второй - уже в

template<class _Traits> inline
basic_ostream<char, _Traits>& __cdecl std::operator<<(
basic_ostream<char, _Traits>& _Ostr,
const char *_Val)

почему-то неправильно(?) разрешается перегрузка.