libstdc++: Fix mem-initializer in std::move_only_function [PR102825]
libstdc++-v3/ChangeLog: PR libstdc++/102825 * include/bits/mofunc_impl.h (move_only_function): Remove invalid base initializer. * testsuite/20_util/move_only_function/cons.cc: Instantiate constructors to check bodies.
This commit is contained in:
parent
476ca5ade8
commit
9890b12c72
2 changed files with 28 additions and 1 deletions
|
@ -108,7 +108,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||
move_only_function(in_place_type_t<_Tp>, initializer_list<_Up> __il,
|
||||
_Args&&... __args)
|
||||
noexcept(_S_nothrow_init<_Tp, initializer_list<_Up>&, _Args...>())
|
||||
: _Mofunc_base(nullptr), _M_invoke(&_S_invoke<_Tp>)
|
||||
: _M_invoke(&_S_invoke<_Tp>)
|
||||
{
|
||||
static_assert(is_same_v<decay_t<_Tp>, _Tp>);
|
||||
_M_init<_Tp>(__il, std::forward<_Args>(__args)...);
|
||||
|
|
|
@ -96,3 +96,30 @@ static_assert( ! is_nothrow_constructible_v<move_only_function<void() noexcept>,
|
|||
in_place_type_t<H>, int> );
|
||||
static_assert( is_nothrow_constructible_v<move_only_function<void() noexcept>,
|
||||
in_place_type_t<H>, int, int> );
|
||||
|
||||
struct I {
|
||||
I(int, const char*);
|
||||
I(std::initializer_list<char>);
|
||||
int operator()() const noexcept;
|
||||
};
|
||||
|
||||
static_assert( is_constructible_v<move_only_function<void()>,
|
||||
std::in_place_type_t<I>,
|
||||
int, const char*> );
|
||||
static_assert( is_constructible_v<move_only_function<void()>,
|
||||
std::in_place_type_t<I>,
|
||||
std::initializer_list<char>> );
|
||||
|
||||
void
|
||||
test_instantiation()
|
||||
{
|
||||
// Instantiate the constructor bodies
|
||||
move_only_function<void()> f0;
|
||||
move_only_function<void()> f1(nullptr);
|
||||
move_only_function<void()> f2( I(1, "two") );
|
||||
move_only_function<void()> f3(std::in_place_type<I>, 3, "four");
|
||||
move_only_function<void()> f4(std::in_place_type<I>, // PR libstdc++/102825
|
||||
{ 'P', 'R', '1', '0', '2', '8', '2', '5'});
|
||||
auto f5 = std::move(f4);
|
||||
f4 = std::move(f5);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue