Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++11: is std::locale::empty() even a thing?

Tags:

c++

c++11

locale

Trying to compile some code from StackOverflow, basically, these lines:

std::wifstream wif(filename);
wif.imbue(std::locale(std::locale::empty(), new std::codecvt_utf8<wchar_t>));

GCC version: gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0

I get a compile error:

'empty' is not a member of 'std::locale'

And I agree with the compiler, checked with documentation like cppreference - there is no info about such thing. Header files as well do not show anything.

I wonder, if this is just me or the sample code from another topic...

Can it be a MSVC feature? (the sample code I used is from the question related to Windows)

like image 358
andrgolubev Avatar asked Oct 18 '22 18:10

andrgolubev


1 Answers

This is a platform-specific extension to the locale class, and it used to be described in this MSVC documentation*:

In this implementation, you can also call the static member function:

static locale empty( );

to construct a locale object that has no facets. It is also a transparent locale; if the template functions has_facet and use_facet cannot find the requested facet in a transparent locale, they consult first the global locale and then, if that is transparent, the classic locale.

* the MSVC documentation link is outdated now, for best replacement see this documentation page instead

like image 125
andrgolubev Avatar answered Oct 21 '22 01:10

andrgolubev