Я случайно попытался передать QString с помощью std::ostream. Однако компиляция (Windows SDK 7.1) прошла успешно, но поставил предупреждение:
Warning:C4717: 'operator<<' : recursive on all control paths, function will cause runtime stack overflow
Наконец, мне интересно, почему возникает рекурсия. Вот небольшой фрагмент кода для воспроизведения. Примечание. Без перегруженного конструктора компилятор выдает ожидаемую ошибку (не найден оператор, принимающий правый операнд типа 'QString').
#include <iostream>
#include <QString>
class CTest
{
public:
CTest(QString str) {}
friend std::ostream & operator <<(std::ostream & out, const CTest & cTest)
{
out << "std::string";
out << QString("HelloWorld");
return out;
}
};
int main(int argc, char *argv[])
{
CTest t("testing");
std::cout << t;
return 0;
}