5

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)

Community
  • 1
  • 1
andrgolubev
  • 825
  • 6
  • 21

2 Answers2

3

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

Community
  • 1
  • 1
andrgolubev
  • 825
  • 6
  • 21
0

Using std::locale() instead of std::locale:empty() worked for me.

Alireza
  • 191
  • 1
  • 4