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
There is a C++ defect report in this area even ...
https://wg21.link/cwg1228
(In reply to Andrew Pinski from comment #1) > There is a C++ defect report in this area even ... Can you post a link to the DR that you're referencing? Or are you referring to this https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0398r0.html
(In reply to Andrew Pinski from comment #1) > There is a C++ defect report in this area even ... Looks like that gcc and clang are non-compliant here as per this discussion in CWG issue list: https://github.com/cplusplus/CWG/issues/486 Also, the cwg 1228 is categorised as NAD. https://wg21.link/cwg1228 so this(that the program should compile) looks intentional.
Not a regression so I think it has to wait until GCC 15. I'd like to take a look then. I've updated https://gcc.gnu.org/projects/cxx-dr-status.html
This is CWG 2856 https://cplusplus.github.io/CWG/issues/2856.html