basic_ostream
グローバルオブジェクトのデストラクタが呼び出されたときにテキストを標準出力に出力するようにコーディングされた関数があります。この関数をストリームに登録しましたが、何らかの理由で何もしません:
void callback(std::ios_base::event evt, std::ios_base& str, int index)
{
if (evt == std::ios_base::erase_event)
{
std::cout << "Erase event";
}
}
int main()
{
std::cout.register_callback(callback, index());
}
エラー/警告はなく、デストラクタへの明示的な呼び出しを追加しない限り、何も出力されません。
std::cout.~basic_ostream<char>(); // "Erase event"
そうするのは間違っていることを認識しているので、それを回避策とは見なしません。バッファから出力をフラッシュしようとしましたが、役に立ちませんでした。なぜこうなった?GCC 4.8 でコードを実行しています。これがデモです。