Currently, if we pass in the same iterator for begin and end, the long double version of do_get would throw a runtime error.
However, according to standard (https://eel.is/c++draft/locale.money.get#virtuals-1):
If a valid sequence is recognized, does not change err; otherwise, sets err to (err|str.failbit), or (err|str.failbit|str.eofbit) if no more characters are available, and does not change units or digits.
So we should set the failbit and eofbit when no more characters are available.
Instead of putting this check here and in the other do_get overload, you can just put everything into __do_get (at the beginning):
No need to set eofbit there, as it's set in do_get anyway.