C++ 我们可以检查boost::locale::generator::generate的区域设置输出是否无效吗?

C++ 我们可以检查boost::locale::generator::generate的区域设置输出是否无效吗?,c++,boost,locale,collator,C++,Boost,Locale,Collator,这是一个由两部分组成的问题,首先我想知道:如果boost::locale::generator::generate()的ID输入是无效值,会发生什么 我检查了测试结果,没有发现如果我们通过了test而不是en_CA.UTF-8会发生什么。我知道没有抛出异常,但我希望它有一些指示,表明区域设置输入无效 我仔细考虑了一下,意识到当我尝试使用collatorcompare函数使用生成的区域设置时,会出现一个问题。将引发访问冲突异常 下面的代码片段: #include <string> #i

这是一个由两部分组成的问题,首先我想知道:如果
boost::locale::generator::generate()
的ID输入是无效值,会发生什么

我检查了测试结果,没有发现如果我们通过了
test
而不是
en_CA.UTF-8
会发生什么。我知道没有抛出异常,但我希望它有一些指示,表明区域设置输入无效

我仔细考虑了一下,意识到当我尝试使用collator
compare
函数使用生成的区域设置时,会出现一个问题。将引发访问冲突异常

下面的代码片段:

#include <string>
#include "boost/locale.hpp"
#include "boost/locale/collator.hpp"

using namespace boost::locale;

void InitializeLocale( const std::string zLanguage, const std::string zCountry, std::locale & out_Locale )
{
    generator gen;
    gen.categories( collation_facet | formatting_facet | convert_facet );

    //out_Locale = gen( zLanguage + "_" + zCountry + ".UTF-8" );
    out_Locale = gen( "test" );

    // TODO: Check if out_Locale is valid??
    std::locale::global( out_Locale );
}

int main( int iNumArgs, char ** azArgs )
{
    std::locale currentLocale;
    InitializeLocale( "en", "CA", currentLocale );

    // Works
    std::cout << boost::locale::to_upper( "test", currentLocale ) << std::endl;
    // Throws exception: Exception thrown at 0x00007FF6FFFCB8C2 in TestProgram.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.
    std::use_facet<boost::locale::collator<char>>( currentLocale ).compare( collator_base::secondary, "test", "TEST");
}
#包括
#包括“boost/locale.hpp”
#包括“boost/locale/collator.hpp”
使用名称空间boost::locale;
void InitializeLocale(const std::string zLanguage,const std::string zCountry,std::locale&out_locale)
{
发电机发电机;
gen.categories(排序|方面|格式|方面|转换|方面);
//out_Locale=gen(zLanguage+“”+zCountry+”.UTF-8”);
out_Locale=gen(“测试”);
//TODO:检查退出区域设置是否有效??
std::locale::global(out\u locale);
}
int main(int iNumArgs,字符**azArgs)
{
std::locale currentLocale;
初始化刻度(“en”、“CA”、currentLocale);
//工作
标准::cout