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)