https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113300
Bug ID: 113300 Summary: GCC rejects valid program involving explicit and non explicit default constructors Product: gcc Version: 14.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: jlame646 at gmail dot com Target Milestone: --- The following valid program is rejected by gcc and clang but accepted by msvc. https://godbolt.org/z/Y3x8nP11M ``` struct A { explicit A(int = 10); A()= default; }; A a = {}; //msvc ok but gcc and clang fails here ``` GCC says: ``` <source>:8:8: error: conversion from '<brace-enclosed initializer list>' to 'A' is ambiguous 8 | A a = {}; //msvc ok but gcc and clang fails here | ^ <source>:5:3: note: candidate: 'constexpr A::A()' 5 | A()= default; | ^ <source>:4:12: note: candidate: 'A::A(int)' 4 | explicit A(int = 10); ``` The reason why this is valid is discussed here: https://stackoverflow.com/questions/77788861/ambiguous-constructor-error-in-gcc-but-not-in-msvc