Relax std::move_if_noexcept for std::pair
Ville Voutilainen
ville.voutilainen@gmail.com
Thu Dec 20 08:04:00 GMT 2018
On Thu, 20 Dec 2018 at 08:29, François Dumont <frs.dumont@gmail.com> wrote:
>
> Hi
>
> I eventually find out what was the problem with the
> std::move_if_noexcept within associative containers.
>
> The std::pair move default constructor might not move both first
> and second member. If any is not moveable it will just copy it. And then
..as it should..
> the noexcept qualification of the copy constructor will participate in
> the noexcept qualification of the std::pair move constructor. So
> std::move_if_noexcept can eventually decide to not use move because a
> _copy_ constructor not noexcept qualified.
..and again, as it should.
> This is why I am partially specializing __move_if_noexcept_cond. As
> there doesn't seem to exist any Standard meta function to find out if
> move will take place I resort using std::is_const as in this case for
> sure the compiler won't call the move constructor.
That seems wrong; just because a type is or is not const has nothing
to do whether
it's nothrow_move_constructible.
I don't understand what problem this is solving, and how it's not
introducing new problems.
More information about the Libstdc++
mailing list