https://gcc.gnu.org/bugzilla/show_bug.cgi?id=124447
--- Comment #8 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Note, https://eel.is/c++draft/cstdint.syn#1 describes it like that, i.e. namespace std { using something_t = ...; } rather than namespace std { using ::something_t; } Now, without reflection guess there is no difference. And <cstdint> actually has two different halves, one: namespace std { #ifdef _GLIBCXX_USE_C99_STDINT using ::int8_t; using ::int16_t; using ::int32_t; using ::int64_t; ... #else // !_GLIBCXX_USE_C99_STDINT using intmax_t = __INTMAX_TYPE__; using uintmax_t = __UINTMAX_TYPE__; #ifdef __INT8_TYPE__ using int8_t = __INT8_TYPE__; #endif #ifdef __INT16_TYPE__ using int16_t = __INT16_TYPE__; #endif #ifdef __INT32_TYPE__ using int32_t = __INT32_TYPE__; #endif #ifdef __INT64_TYPE__ using int64_t = __INT64_TYPE__; #endif ... #endif } So, guess it works if _GLIBCXX_USE_C99_STDINT is not defined and doesn't if it is.
