https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100963
Bug ID: 100963 Summary: GCC 11 regression: templated constructor with std::initializer_list<T> is not selected Product: gcc Version: 11.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: j.l.k at gmx dot com Target Milestone: --- Consider the following program (preprocessed source is attached): ``` #include <iostream> struct A { explicit A(int) { std::cout << "A(int) constructor called" << std::endl; } A(std::initializer_list<int>) { std::cout << "A's constructor with initializer_list called" << std::endl; } }; struct B { explicit B(int) { std::cout << "B(int) constructor called" << std::endl; } template<typename T> B(std::initializer_list<T>) { std::cout << "B's constructor with initializer_list called" << std::endl; } }; int main() { A({0}); B({0}); } ``` When compiled with GCC 11 (`g++ -std=c++14 gcc11_initializer_list_constructor.cpp -o gcc11_initializer_list_constructor`), the program gives the following output: A's constructor with initializer_list called B(int) constructor called Whereas with GCC 10 it produced this as expected: A's constructor with initializer_list called B's constructor with initializer_list called Tested with GCC 11.1.0 from Arch Linux, the PKGBUILD is located here: https://github.com/archlinux/svntogit-packages/blob/92c91ef891e9e2ed48f7f75921eb6321a2c7947d/trunk/PKGBUILD