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()

Reply via email to