https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89605
--- Comment #1 from xavier at cremaschi dot fr --- FYI it also compiles if there is no class but just a free function : #include <string> #include <functional> #include <iostream> using namespace std; using ConverterFunction = function<double(double)>; void _foo( const ConverterFunction& converter = [](double value) -> double { return value; }, const ConverterFunction& converterBack = [](double value) -> double { return value; } ); void _foo( const ConverterFunction& converter, const ConverterFunction& converterBack) { cout << "foo " << converter(42) << endl; } int main() { _foo(); return 0; }