-
Notifications
You must be signed in to change notification settings - Fork 0
Description
Migrating from https://isocpp.org/files/papers/P1018R18.html#issues
https://cplusplus.github.io/LWG/issue2432
Section: 17.11 [support.initlist] Status: Tentatively NAD Submitter: David Krauss Opened: 2014-09-30 Last modified: 2022-09-03
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:
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;
[…]
};
[…]
}
LWG telecon appears to want a language change to disallow assigning a braced-init-list to an std::initializer_list but still permit move assignment of std::initializer_list objects. That is,
auto il1 = {1,2,3};
auto il2 = {4,5,6};
il1 = {7,8,9}; // currently well-formed but dangles immediately; should be ill-formed
il1 = std::move(il2); // currently well-formed and should remain so
Meeting: Proposed resolution:
initializer_list(const initializer_list&) = default;
initializer_list(initializer_list&&) = default;
[[deprecated]] initializer_list& operator=(const initializer_list&) = default;
[[deprecated]] initializer_list& operator=(initializer_list&&) = default;
SF F N A SA
0 3 12 0 0
JF emailed LEWG, to see if they have an opinion, no feedback. Asked LEWG chairs to schedule for a telecon.
LWG discussed priority.