https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87364
--- Comment #2 from Will Wray <wjwray at gmail dot com> --- Created attachment 44735 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=44735&action=edit Test for enumerator id pretty print patch pp_enum_test auto_name<auto...> returns std::array<char>, splitting the non-type arg 'names' from __PRETTY_FUNCTION__ AUTO_NAME(v...) is a macro to display test input and output nicely Given these enum definitions: /******************************************/ enum e { a, b, c=b }; // Unscoped global enum class E : char { a, b, c=b }; // Scoped global struct U { enum e { a, b, c=b }; }; // Unscoped member struct S { enum class E { a, b, c=b }; }; // Scoped member namespace N { enum { a, b, c=b }; } // Namespace anon int main() { enum m { a, b, c=b }; // Unscoped local enum class M { a, b, c=b }; // Scoped local struct K { enum e { a, b, c=b }; }; // Unscoped local member struct L { enum class E {a, b, c=b};}; // Scoped local member /******************************************/ The test output before the patch (all cast expressions): ================================ auto_name <::a, ::b, ::c, e(3)> -> (e)0, (e)1, (e)1, (e)3 auto_name <E::a, E::b, E::c, E{3}> -> (E)0, (E)1, (E)1, (E)3 auto_name <U::a, U::b, U::c, U::e(3)> -> (U::e)0, (U::e)1, (U::e)1, (U::e)3 auto_name <S::E::a, S::E::b, S::E::c, S::E(3)> -> (S::E)0, (S::E)1, (S::E)1, (S::E)3 auto_name <N::a, N::b, N::c, decltype(N::a)(3)> -> (N::._85)0, (N::._85)1, (N::._85)1, (N::._85)3 auto_name <a, b, c, m(3)> -> (main::m)0, (main::m)1, (main::m)1, (main::m)3 auto_name <M::a, M::b, M::c, M(3)> -> (main::M)0, (main::M)1, (main::M)1, (main::M)3 auto_name <K::a, K::b, K::c, K::e(3)> -> (main::K::e)0, (main::K::e)1, (main::K::e)1, (main::K::e)3 auto_name <L::E::a, L::E::b, L::E::c, L::E(3)> -> (main::L::E)0, (main::L::E)1, (main::L::E)1, (main::L::E)3 The test output after the patch: =============================== auto_name <::a, ::b, ::c, e(3)> -> a, b, b, (e)3 auto_name <E::a, E::b, E::c, E{3}> -> E::a, E::b, E::b, (E)3 auto_name <U::a, U::b, U::c, U::e(3)> -> U::a, U::b, U::b, (U::e)3 auto_name <S::E::a, S::E::b, S::E::c, S::E(3)> -> S::E::a, S::E::b, S::E::b, (S::E)3 auto_name <N::a, N::b, N::c, decltype(N::a)(3)> -> N::a, N::b, N::b, (N::._85)3 auto_name <a, b, c, m(3)> -> main::a, main::b, main::b, (main::m)3 auto_name <M::a, M::b, M::c, M(3)> -> main::M::a, main::M::b, main::M::b, (main::M)3 auto_name <K::a, K::b, K::c, K::e(3)> -> main::K::a, main::K::b, main::K::b, (main::K::e)3 auto_name <L::E::a, L::E::b, L::E::c, L::E(3)> -> main::L::E::a, main::L::E::b, main::L::E::b, (main::L::E)3