This paper is not a proposal. It's a report of what standard library facilities now work with aggregates automatically, whereas they didn't work before aggregates were initializable from parenthesized parameter lists. The report in this paper may be incomplete, but hopefully should be correct.
The material in the paper is based on an exercise of adding tests for aggregate-paren-init to libstdc++.
The bedrock of all of this is that now std::is_constructible
gives us the right answer for whether an aggregate is initializable
from a parenthesized argument list.
The next plumbing bits are std::allocator_traits<T>::construct and std::construct_at.
Now we have the building blocks in hand, and the rest just falls out.
std::any
I.e. any::emplace, any(in_place_type_t<T>, ...).
std::optional
I.e. optional::emplace, optional(in_place_t, ...).
Pretty similar to any and optional.
std::make_uniqueImagine that, THE recommended way to create objects with dynamic storage duration now works with more types.
std::make_sharedImagine that, the recommended way to create shared objects now works with more types.
std::pairYou probably shouldn't be calling that in your code, though.. ..as it should be just an implementation detail of the following item.
std::make_obj_using_allocator
and std::uninitialized_construct_using_allocatorKinda nice that your allocator-aware types work even with aggregate element types.
deque::emplace_front, deque::emplace_backforward_list::emplace_front, forward_list::emplace_afterlist::emplace_front, list::emplace_back, list::emplacemap::emplace, map::try_emplaceset::emplacemultimap::emplacemultiset::emplacepriority_queue::emplacequeue::emplacestack::emplaceunordered_map::emplace, unordered_map::try_emplaceunordered_set::emplaceunordered_multimap::emplaceunordered_multiset::emplacevector::emplace, vector::emplace_backYay, the facility that can construct container elements without copying or moving them can now also construct aggregate elements.
..now that we made a language fix that made the library facilities Just Work.