https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79980
--- Comment #6 from Jonathan Wakely <redi at gcc dot gnu.org> --- It's just a dumb error where I used a typedef that was previously defined, the fix is: static underlying_type<codecvt_mode>::type to_integer(codecvt_mode m) { return static_cast<underlying_type<codecvt_mode>::type>(m); }