C++11:std::locale::empty() 是一件事吗?

and*_*bev 6 c++ locale c++11

尝试从 StackOverflow 编译一些代码,基本上是这些行:

std::wifstream wif(filename);
wif.imbue(std::locale(std::locale::empty(), new std::codecvt_utf8<wchar_t>));
Run Code Online (Sandbox Code Playgroud)

海湾合作委员会版本:gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0

我收到编译错误:

“空”不是“std::locale”的成员

我同意编译器的观点,并检查了cppreference等文档- 没有关于此类事情的信息。头文件也没有显示任何内容。

我想知道,这只是我的问题还是另一个主题的示例代码......

它可以是 MSVC 功能吗?(我使用的示例代码来自与Windows相关的问题)

and*_*bev 3

这是 locale 类的特定于平台的扩展,它曾经在此 MSVC 文档中进行过描述*:

在这个实现中,你还可以调用静态成员函数:

static locale empty( );
Run Code Online (Sandbox Code Playgroud)

构造一个locale没有面的对象。它也是一个透明的语言环境;如果模板起作用has_facet并且use_facet无法在透明区域设置中找到请求的方面,则它们首先参考全局区域设置,然后,如果是透明的,则参考经典区域设置。

* MSVC 文档链接现已过时,要获得最佳替换,请参阅此文档页面