The shorter paths make the sources easier to navigate.
Basically revert of #99 / f44b3bb771f01fb94614260d57e1d09cdfe1cdff
after the underlying issue is resolved.
CI shows that MSVC calls the allocator 3 times as often as expected.
This is due to some internal structures.
Hence only count char and wchar_t allocations
Cygwin doesn't (reliably) use the actual allocator type but possibly one
obtained via `rebind` which makes all checks for e.g. `Alloc::usedId`
fail as the value stays zero.
Use a single variable in a private namespace and access it by reference.
Allows to e.g. convert `std::u8string`s, translate them and run boundary
analysis.
Formatting isn't possible due to lack of facets
(more specifically: their IDs) in the standard libraries
Try to achieve 100% test code coverage to find accidentally missed ones.
Especially the WinAPI tests had some wrongly uncovered lines at function
start/end which needed to be excluded.
To avoid the UBSAN failure it is enough to mark the class as VISIBLE
similar to e.g. exception types.
This allows to remove the workaround with custom deleter and
UBSAN-supression macros which makes the code more readable
Clang reports an error due to the use of an unexported (because private
implementation) class:
```
boost/locale/encoding.hpp:243:87: runtime error: member call on address 0x7fb7b7405d60 which does not point to an object of type 'boost::locale::conv::detail::charset_converter<char, char>'
0x7fb7b7405d60: note: object is of type 'boost::locale::conv::impl::iconv_to_utf<char>'
6e 67 00 00 28 f5 b6 0c 01 00 00 00 90 5d 40 b7 b7 7f 00 00 00 00 00 00 69 6e 74 20 55 32 30 61
^~~~~~~~~~~~~~~~~~~~~~~
vptr for 'boost::locale::conv::impl::iconv_to_utf<char>'
#0 0x10ca8c63c in boost::locale::conv::utf_encoder<char>::convert(boost::basic_string_view<char, std::__1::char_traits<char> > const&) const+0xcc (test_encoding:x86_64+0x10002063c)
```
May save some overhead creating implementation classes and allows to
write shorter code for doing the same conversions repeatatly.
Also allows a hook for testing each backend individually.
- Don't loop over backends as that is ignored by the conversion functions
- Rename functions (e.g. `test_simple_conversions` -> `test_latin1_conversions`, add `error` in `test_to/from_utf`)
- Add `test_utf_to_utf`