有没有标准的方法来检查一个新的建设是否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 Visual C++ 的 STL 实现不会引发异常。
不知道哪个 C++ 编译器会编译代码,如何检查新的构造是否std::codecvt_byname
成功?或者,如果没有内存不足的情况,有没有办法检查构造是否会成功?