https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83264
Jason Merrill <jason at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Assignee|unassigned at gcc dot gnu.org |jason at gcc dot gnu.org See Also| |https://gcc.gnu.org/bugzill | |a/show_bug.cgi?id=64665 --- Comment #11 from Jason Merrill <jason at gcc dot gnu.org> --- I agree with comment #7 that this is DR1467, not 2137. Both deal with the relative priority of single-element initialization and initializer_list initialization; 1467 is overload resolution between initializer_list and something else, 2137 is at a higher level determining how to initialize a class from a braced-init-list. In this testcase the extra () mean that we aren't dealing with list-initialization of obj, but rather of the constructor parameter, so 1467 is the relevant DR. This is also the same issue as PR64665, where a 2015 comment from Richard Smith of Clang agrees with my understanding at the time that the initializer_list tiebreaker takes precedence over everything else. This is consistent with the effect of 2137--which no other compiler seems to implement yet. However, I now see that this isn't what the standard actually says: as comment #9 points out, [over.ics.rank] talks about comparing forms first, and the initializer_list tiebreaker only applies to conversions of the same form. I thought of list-initialization as its own form, but the standard doesn't say that; the three forms are still standard, user-defined, or ellipsis. I've asked the CWG reflector for input.