libstdc++: Fix regression in std::_Construct (PR 94831)
authorJonathan Wakely <jwakely@redhat.com>
Tue, 28 Apr 2020 22:26:21 +0000 (23:26 +0100)
committerJonathan Wakely <jwakely@redhat.com>
Tue, 28 Apr 2020 22:39:38 +0000 (23:39 +0100)
commit162c40a4c127cc55d701bb8760e17708d0ca2fe0
tree79244a5440aa1ad1b33afbf2433de764ed0fb673
parent50714f45eeaf315a0b55d3db3de3bf8df8e94b04
libstdc++: Fix regression in std::_Construct (PR 94831)

By trying to reuse the existing std::_Construct function as a wrapper
for std::construct_at I introduced regressions, because changing
std::_Construct to return non-void made it ill-formed for array types.

The solution is to revert _Construct to its former state, and change
allocator_traits::construct to explicitly call construct_at instead.
This decouples all the existing callers of _Construct from the new
construct_at requirements.

PR libstdc++/94831
* include/bits/alloc_traits.h (_S_construct): Restore placement
new-expression for C++11/14/17 and call std::construct_at directly
for C++20.
* include/bits/stl_construct.h (_Construct): Revert to non-constexpr
function returning void.
* testsuite/20_util/specialized_algorithms/
uninitialized_value_construct/94831.cc: New test.
* testsuite/23_containers/vector/cons/94831.cc: New test.
libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/alloc_traits.h
libstdc++-v3/include/bits/stl_construct.h
libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_value_construct/94831.cc [new file with mode: 0644]
libstdc++-v3/testsuite/23_containers/vector/cons/94831.cc [new file with mode: 0644]