https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86997
Bug ID: 86997 Summary: error: call of overloaded ‘NoDestructor(<brace-enclosed initializer list>)’ is ambiguous Product: gcc Version: 9.0 Status: UNCONFIRMED Keywords: rejects-valid Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: marxin at gcc dot gnu.org CC: jason at gcc dot gnu.org Target Milestone: --- All GCC releases reject a test-case isolated from Chromium: $ cat browser_theme_pack.ii class a; struct NoDestructor { NoDestructor(); NoDestructor(a); }; int main() { NoDestructor b({}); } $ g++ -c browser_theme_pack.ii browser_theme_pack.ii: In function ‘int main()’: browser_theme_pack.ii:10:20: error: call of overloaded ‘NoDestructor(<brace-enclosed initializer list>)’ is ambiguous NoDestructor b({}); ^ browser_theme_pack.ii:5:3: note: candidate: ‘NoDestructor::NoDestructor(a)’ NoDestructor(a); ^~~~~~~~~~~~ browser_theme_pack.ii:3:8: note: candidate: ‘constexpr NoDestructor::NoDestructor(const NoDestructor&)’ struct NoDestructor { ^~~~~~~~~~~~ browser_theme_pack.ii:3:8: note: candidate: ‘constexpr NoDestructor::NoDestructor(NoDestructor&&)’ While clang++ and ICC accept that: $ clang++ -c browser_theme_pack.ii -S -o/dev/stdout | grep call callq _ZN12NoDestructorC1Ev $ c++filt _ZN12NoDestructorC1Ev NoDestructor::NoDestructor()