Previously, this test snippet would report incorrect information:
F::mask m; std::wstring in(L"\u00DA"); // LATIN CAPITAL LETTER U WITH ACUTE f.is(in.data(), in.data() + 1, &m); // m & F::lower would be set
The single-character version of the is function wasn't
affected by this issue though.
Define _LIBCPP_CTYPE_MASK_IS_COMPOSITE_ALPHA for Windows,
as the alpha / _ALPHA constant is a mask consisting of
multiple bits set, which avoids setting alpha whenver any
of the bits is set, in the do_is implementation.
On Windows, with the "C" locale, characters outside of ASCII are
interpreted according to the current system code page, which
can consider chars like e.g. 0xDA as an uppercase alphabetical
character.
Due to the differing classification of some characters, the
scan_is and scan_not tests are quite annoying to fix, thus just
ifdef out some of the tests for the "C" locale there - the code gets
tested with the more standard en_US.UTF-8 locale anyway.
This looks like a bugfix, so "Fix the ... tests" seems like the wrong commit summary.
Before this patch, did f.is(F::upper, L'a') return true instead of false? That'd be a good thing to put in the commit message.