https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109871
Bug ID: 109871 Summary: error: call of overloaded ... ambiguous (std::vector vs designated initializers) Product: gcc Version: 13.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: gnu.ojxq8 at dralias dot com Target Milestone: --- When calling an overloaded function or constructor that takes a std::vector, as well as a struct that allows designated initializers, the code is incorrectly rejected by all versions of GCC, but accepted by Clang. Example: ---------------- #include <vector> struct S {}; struct Options { int opt{}; }; void A(std::vector<S>) {} void A(Options) {} int main() { A({.opt = 1}); } ---------------- Error: ---------------- <source>: In function 'int main()': <source>:8:15: error: call of overloaded 'A(<brace-enclosed initializer list>)' is ambiguous 8 | int main() { A({.opt = 1}); } | ~^~~~~~~~~~~~ <source>:6:6: note: candidate: 'void A(std::vector<S>)' 6 | void A(std::vector<S>) {} | ^ <source>:7:6: note: candidate: 'void A(Options)' 7 | void A(Options) {} | ^ Compiler returned: 1 ---------------- There is PR 59389 and PR 86997, but they seem unrelated because they are not about designated initializers.