Guillaume Munch wrote:
> Le 30/08/2016 à 21:12, Georg Baum a écrit :
>> Guillaume Munch wrote:
>>
>>>
>>> * Why ascii_num_get_facet::do_get uses from_local8bit at some
>>> point.
>>
>> The encoding does not matter here: Our own numpunct_facet does not
>> override truename() and falsename(), so std::numpunct::truename() and
>> std::numpunct::falsename() are used. I don't know why Enrico chose
>> from_local8bit and not from_ascii() here.
>>
>>> * Is the numpunct<lyx::char_type> facet correctly set with the way
>>> it occurs in the code?
>>
>> I think so. Otherwise we would have the classical separator problem,
>> e.g. outputting 2.3 as "2,3" when using a german locale. Do you see
>> any specific problem?
>
> The custom facets circumvent using std::numpunct<char32_t>, e.g.
> ascii_num_get_facet converts from std::numpunct<char> (which by the way
> is always the C locale so one could just use from_ascii("true"), etc.).
> This is the only place where there is a numpunct so I imagine that this
> is the one your are referring to with "our own numpunct".
Yes.
> Still, we cannot assume that std::numpunct<char32_t> is available. So
> either someone is confident that nothing else requires it, or it should
> be implemented like the other three facets.
I am confident that it is not required. Otherwise we would currently need a
replacement implementation without your patch when using boost::uint32_t on
mingw and cygwin. Besides, you implemented it already in char32_t_facets.h.
>> Unfortunately I cannot try the patch, since I get undefined refernces
>> to the std::codecvt functions that we previously defined for gcc on
>> windows:
>
> Unlike std::codecvt<boost::uint32_t>, std::codecvt<char32_t> is part of
> the spec so it's quite a different situation... Does it match with
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66030#c7 ?
No. The bug is about gcc5 (I am using gcc 4.9.2), and on windows (it fails
for me on linux). Also, std::codecvt<...>::id is not among the missing
symbols.
Finally I found some time to do more tests:
- Cross compiling with mingw gcc 4.9.3 works.
- Compiling with clang (linking against the same libstdc++ as gcc 4.9.2)
works as well.
- Compiling with gcc 5.1 works also.
Quick tests with running the two latter versions did not show any problem,
so it really looks like gcc 4.9.2 is buggy here.
Georg