Before we go any further, I just want to make you aware that Boost.Text makes
extensive use of proxy iterators (see utf_8_to_32_iterator
and friends).
This is fine in C++20 and later, but is not fine in earlier versions of standard.
In fact, in earlier versions proxy iterators are not iterators at all, by the
standard's formal definition.
This is not a problem in practice; I have yet to run into any code that does not compile, or that does not work in some other way, due to the use of these proxy iterators, but it is a theoretical problem about which you should know. Consider yourself warned.