https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69944 --- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> --- If you define do_widen(const char*, const char*, MyChar*) correctly, you will get the behaviour you expect.