This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of Tentatively NAD status.

### 2432. `initializer_list` assignability

Section: 17.11 [support.initlist] Status: Tentatively NAD Submitter: David Krauss Opened: 2014-09-30 Last modified: 2015-05-22

Priority: 2

View other active issues in [support.initlist].

View all other issues in [support.initlist].

View all issues with Tentatively NAD status.

Discussion:

`std::initializer_list::operator=` 17.11 [support.initlist] is horribly broken and it needs deprecation:

>     std::initializer_list<foo> a = {{1}, {2}, {3}};
>     a = {{4}, {5}, {6}};
>     // New sequence is already destroyed.

Assignability of `initializer_list` isn't explicitly specified, but most implementations supply a default assignment operator. I'm not sure what 16.3 [description] says, but it probably doesn't matter.

[Lenexa 2015-05-05: Send to EWG as discussed in Telecon]

[2022-08-24; Reflector poll]

Set status to Tentatively NAD after reflector poll in October 2021.

"If somebody wants to revisit it, they'll need to write a paper to demonstrate what the change would break, whether that would be a problem in practice, and convince the evolution groups to make a change. But it's not an LWG issue."

Proposed resolution:

1. Edit 17.11 [support.initlist] p1, class template `initializer_list` synopsis, as indicated:

   >     namespace std {
   >       template<class E> class initializer_list {
   >       public:
   >         […]
   >         constexpr initializer_list() noexcept;

   >         initializer_list(const initializer_list&) = default;
   >         initializer_list(initializer_list&&) = default;
   >         initializer_list& operator=(const initializer_list&) = delete;
   >         initializer_list& operator=(initializer_list&&) = delete;

   >         constexpr size_t size() const noexcept;
   >         […]
   >       };
   >       […]
   >     }