https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89605
Bug ID: 89605 Summary: A method cannot have two identical lambdas as default arguments Product: gcc Version: 8.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: xavier at cremaschi dot fr Target Milestone: --- $ g++ --version g++ (Debian 8.2.0-21) 8.2.0 The following code does not compile : #include <string> #include <functional> #include <iostream> using namespace std; class S { public: using ConverterFunction = function<double(double)>; void _foo( const ConverterFunction& converter = [](double value) -> double { return value; }, const ConverterFunction& converterBack = [](double value) -> double { return value; } ); }; void S::_foo( const ConverterFunction& converter, const ConverterFunction& converterBack) { cout << "foo " << converter(42) << endl; } int main() { S s; s._foo(); return 0; } It triggers the following error : /tmp/ccW5xjuM.s: Assembler messages: /tmp/ccW5xjuM.s:183: Error: symbol `_ZZN1S4_fooERKSt8functionIFddEES4_Ed_NKUldE_clEd' is already defined /tmp/ccW5xjuM.s:514: Error: symbol `_ZSt4moveIRZN1S4_fooERKSt8functionIFddEES5_Ed_UldE_EONSt16remove_referenceIT_E4typeEOS9_' is already defined /tmp/ccW5xjuM.s:534: Error: symbol `_ZNSt8functionIFddEEC2IZN1S4_fooERKS1_S5_Ed_UldE_vvEET_' is already defined /tmp/ccW5xjuM.s:788: Error: symbol `_ZNSt14_Function_base13_Base_managerIZN1S4_fooERKSt8functionIFddEES6_Ed_UldE_E21_M_not_empty_functionIS7_EEbRKT_' is already defined /tmp/ccW5xjuM.s:807: Error: symbol `_ZNSt14_Function_base13_Base_managerIZN1S4_fooERKSt8functionIFddEES6_Ed_UldE_E15_M_init_functorERSt9_Any_dataOS7_' is already defined /tmp/ccW5xjuM.s:836: Error: symbol `_ZNSt17_Function_handlerIFddEZN1S4_fooERKSt8functionIS0_ES5_Ed_UldE_E9_M_invokeERKSt9_Any_dataOd' is already defined /tmp/ccW5xjuM.s:873: Error: symbol `_ZNSt14_Function_base13_Base_managerIZN1S4_fooERKSt8functionIFddEES6_Ed_UldE_E10_M_managerERSt9_Any_dataRKS9_St18_Manager_operation' is already defined /tmp/ccW5xjuM.s:1099: Error: symbol `_ZNSt14_Function_base13_Base_managerIZN1S4_fooERKSt8functionIFddEES6_Ed_UldE_E15_M_init_functorERSt9_Any_dataOS7_St17integral_constantIbLb1EE' is already defined /tmp/ccW5xjuM.s:1129: Error: symbol `_ZNSt14_Function_base13_Base_managerIZN1S4_fooERKSt8functionIFddEES6_Ed_UldE_E14_M_get_pointerERKSt9_Any_data' is already defined /tmp/ccW5xjuM.s:1156: Error: symbol `_ZNSt9_Any_data9_M_accessIPZN1S4_fooERKSt8functionIFddEES6_Ed_UldE_EERT_v' is already defined /tmp/ccW5xjuM.s:1178: Error: symbol `_ZNSt14_Function_base13_Base_managerIZN1S4_fooERKSt8functionIFddEES6_Ed_UldE_E8_M_cloneERSt9_Any_dataRKS9_St17integral_constantIbLb1EE' is already defined /tmp/ccW5xjuM.s:1208: Error: symbol `_ZNSt14_Function_base13_Base_managerIZN1S4_fooERKSt8functionIFddEES6_Ed_UldE_E10_M_destroyERSt9_Any_dataSt17integral_constantIbLb1EE' is already defined /tmp/ccW5xjuM.s:1297: Error: symbol `_ZNKSt9_Any_data9_M_accessIZN1S4_fooERKSt8functionIFddEES6_Ed_UldE_EERKT_v' is already defined /tmp/ccW5xjuM.s:1319: Error: symbol `_ZSt11__addressofIKZN1S4_fooERKSt8functionIFddEES5_Ed_UldE_EPT_RS8_' is already defined /tmp/ccW5xjuM.s:1339: Error: symbol `_ZNSt9_Any_data9_M_accessIZN1S4_fooERKSt8functionIFddEES6_Ed_UldE_EERT_v' is already defined The exact same code compiles with clang++-6.0 or MSVC (Visual Studio 2017 15.9.4). It also compiles with g++ as soon as implementation is inlined in class definition.