Visual Studio 2012 Release Candidate、C++ を使用して、少し大きなプロジェクトをコンパイルしようとしています。プロジェクトは現在、VS2010 を使用してコンパイルされています。(私はC++ 11のものを手に入れることに貪欲なので、試しました。:)
自分で説明できることは別として、プロジェクトでは次のようなコードを使用します。
ostringstream ostr;
ostr << "The " __FUNCTION__ "() failed to malloc(" << i << ").";
throw bad_alloc(ostr.str().c_str());
コンパイラが文句を言うようになりました
error C2248: 'std::bad_alloc::bad_alloc' : cannot access private member declared
in class 'std::bad_alloc'
...これは本当です。そのバージョンのコンストラクターは非公開になりました。
そのバージョンのコンストラクターを非公開にする理由は何でしたか? そのコンストラクターを引数で使用しないことがC++ 11標準で推奨されていますか?
(割り当てが失敗した場合、何か新しいものを構築しようとすると、より多くの問題が発生する可能性があると想像できます。ただし、それは私の推測にすぎません。)
ありがとう、ペトル