新しいものの建設がstd::codecvt_byname
成功したかどうかを確認する標準的な方法はありますか?
私は次のプログラムを試していました。
// cl /nologo /Fetest_codecvt_byname.exe /EHsc test_codecvt_byname.cpp && test_codecvt_byname
// g++ -o test_codecvt_byname test_codecvt_byname.cpp && test_codecvt_byname
#include <cstdlib>
#include <iostream>
#include <locale>
#include <new>
#include <stdexcept>
int main()
{
try {
new std::codecvt_byname<wchar_t, char, mbstate_t>(".nonsense");
} catch (const std::exception& ex) {
std::cerr << "Error: " << ex.what() << std::endl;
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
std::runtime_error
名前付きロケールがサポートされていない場合、Windows上のlibstdc++は明らかにオブジェクトをスローします。ただし、Microsoft VisualC++のSTL実装は例外をスローしません。
どのC++コンパイラがコードをコンパイルするかわからない場合、新しいものの構築がstd::codecvt_byname
成功したかどうかを確認するにはどうすればよいですか?または、メモリ不足のシナリオがないと仮定して、構築が成功するかどうかを確認する方法はありますか?