誤って std::ostream で QString をストリーミングしようとしました。ただし、コンパイル (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;
}