std ::Порядок поиска перегрузки оператора ostringstream?

У меня есть следующий класс:

namespace {
class MimeLogger : public std::ostringstream
{
public:
    MimeLogger()
    {}

    ~MimeLogger()
    {
        LOGEVENT( logModuleWSE, logEventDebug, logMsgWSETrace1, str() );
    }
};
}

Когда я делаю это:

MimeLogger() << "Hello " << "World";

Первая строка "Hello "обрабатывается как void*. Если я отлаживаю код, "Hello "передается в std::basic_ostream::operator<< (void const*)и печатается как значение указателя, а не строка. Вторая строка "World"правильно передается в глобальный перегруженный оператор <<, который принимает char const*.

Я ожидаю, что оба использования оператора << разрешат одну и ту же перегрузку, но этого не происходит. Может кто-нибудь объяснить и, может быть, предложить исправление?

Заранее спасибо.

Обновление

Я не упомянул, что застрял на C++03, но я рад, что некоторые люди рассмотрели случаи как C++03, так и C++11.

5
задан void.pointer 16 May 2012 в 14:37
поделиться