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.

Reply via email to