https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98441
Bug ID: 98441 Summary: member function pointer incorrectly parsed as having trailing return type Product: gcc Version: 10.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: daniel.santos at pobox dot com Target Milestone: --- When declaring pointer to a member function pointer using atuo& as the function's return type, we get a bad parse: struct a { int& mfn(); }; void fn() { int& (a::*myvar1)(void) = &a::mfn; auto& (a::*myvar2)(void) = &a::mfn; auto (a::*myvar3)(void) = &a::mfn; } Results in: <source>: In function 'void fn()': <source>:8:5: error: 'myvar2' function with trailing return type has 'auto&' as its type rather than plain 'auto' 8 | auto& (a::*myvar2)(void) = &a::mfn; | ^~~~ However, it builds on GCC 9 and is alleged to build on MSVC. The above example is simplified from the original sources: https://github.com/freeorion/freeorion/blob/v0.4.10.1/python/UniverseWrapper.cpp#L193