C++ 如何检查新编解码器VT_byname的构造是否成功

C++ 如何检查新编解码器VT_byname的构造是否成功,c++,localization,codecvt,C++,Localization,Codecvt,是否有标准方法来检查新的std::codevt_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 <

是否有标准方法来检查新的
std::codevt_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;
}
//cl/nologo/Fetest\u codecvt\u byname.exe/EHsc test\u codecvt\u byname.cpp&&test\u codecvt\u byname
//g++-o test_codecvt_byname test_codecvt_byname.cpp&&test_codecvt_byname
#包括
#包括
#包括
#包括
#包括
int main()
{
试一试{
新的std::codevt_别名(“.胡说八道”);
}捕获(const std::exception&ex){

C++11 FDI的std::cerr第[22.3.1.1.2]节,Class
locale::facet
,规定:

对于某些标准方面,从其派生的标准“…
\u byname
”类实现虚拟函数语义,该语义等价于由同名的
locale(const char*)
构建的区域设置方面

不幸的是,如果指定的区域设置无效,标准不要求
std::codevt_byname
构造函数抛出异常,显式
std::locale
构造函数
locale(const char*)也不要求抛出异常
。但是,解决方法是尝试构造区域设置和
codecvt
方面,而不是尝试使用
std::codecvt\u byname