https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99864
Bug ID: 99864 Summary: Abbreviated member function template doesn't compile with default function argument Product: gcc Version: 10.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: stream009 at gmail dot com Target Milestone: --- I got a strange compile error when I use abbreviated function template and default function argument on member function. Compiler version: gcc 10.2 Compiler Exploer Link: https://godbolt.org/z/7cMTP875E // begin source class foo { public: int mem_fn(auto a, int b = 0); }; inline int foo:: mem_fn(auto a, int b/*= 0*/) { return a + b; } int main() { foo x; x.mem_fn(1); } // end source // begin error message 16:15: error: call to 'int foo::mem_fn(auto:2, int) [with auto:1 = int]' uses the default argument for parameter 2, which is not yet defined 16 | x.mem_fn(1); | ^ // end error message - It does compile if function definition is in the class definition (https://godbolt.org/z/T3ncebTqz) - It does compile if function is not member function (https://godbolt.org/z/o8Wc98xE4) - It does compile if member function is not function template (https://godbolt.org/z/vWTxTbjoY) - It does compile if member function is not abbreviated template function (https://godbolt.org/z/qqzK9E6qc)