以下のようなコードでファイルオープンエラーを検出したいです。

#include <iostream>
#include <fstream>

int main()
{
    std::ofstream fout;

    try
    {
        fout.exceptions(std::ofstream::failbit);
        fout.open("/tmp/hoge/hoge.txt");
    }
    catch(const std::ofstream::failure e)
    {
        std::cout << "msg=" << e.what() << std::endl;
    }

    return 0;

}

実行結果は、

$ ./a.out
msg=basic_ios::clear

となります。

msg=basic_ios::failbit

のような結果を期待しているのですが、なぜbasic_ios::clearになるのでしょうか?
それとも私の実装方法に間違いがあるのでしょうか?