https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60437
--- Comment #4 from Foo Bar <neoncat6 at outlook dot com> --- Seems like I found same issue on gcc 9.1.1.... Both MSVC 2019 and clang 9 can compile this source without any error. #include <iostream> #include <vector> class Abc { public: Abc(std::initializer_list<int> il = {}) : vec(il) {} std::vector<int> vec; }; int main(void) { Abc abc{ 1, 2, 3, 4 }; for (auto num : abc.vec) std::cout << num << std::endl; return 0; } Error message: $ g++ -Wall -std=c++11 il_def_arg.cpp il_def_arg.cpp: In function ‘int main()’: il_def_arg.cpp:12:22: error: no matching function for call to ‘Abc::Abc(<brace-enclosed initializer list>)’ 12 | Abc abc{ 1, 2, 3, 4 }; | ^ il_def_arg.cpp:6:2: note: candidate: ‘Abc::Abc(std::initializer_list<int>)’ 6 | Abc(std::initializer_list<int> il = {}) : vec(il) {} | ^~~ il_def_arg.cpp:6:2: note: candidate expects 1 argument, 4 provided il_def_arg.cpp:4:7: note: candidate: ‘Abc::Abc(const Abc&)’ 4 | class Abc { | ^~~ il_def_arg.cpp:4:7: note: candidate expects 1 argument, 4 provided il_def_arg.cpp:4:7: note: candidate: ‘Abc::Abc(Abc&&)’ il_def_arg.cpp:4:7: note: candidate expects 1 argument, 4 provided