https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110102
Jonathan Wakely <redi at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Ever confirmed|0 |1
Keywords| |wrong-code
Component|libstdc++ |c++
Status|UNCONFIRMED |NEW
Known to fail| |13.1.0, 14.0
Known to work| |12.3.0
Summary|[13 regression] |[13/14 regression]
|initializer_list ctors of |initializer_list ctors of
|containers skip |containers skip
|Allocator_traits::construct |Allocator_traits::construct
|, copies move-only type |, copies move-only type
Last reconfirmed| |2023-06-03
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Arthur O'Dwyer from comment #0)
> My guess as to what's happening here:
> - We're definitely calling list(initializer_list<A>)
No we aren't.
The compiler transforms std::list{1,2,3} into std::list{il.begin(), il.end()}
where il is std::initializer_list<int>.
I think this changed with r13-4564-gd081807d8d70e3
We shouldn't be doing this transformation here, because A is a program-defined
type and we don't know its properties. The transformation is safe for
{"","",""} when initializing from std::initializer_list<std::string> but not
here.