On Thu, 20 Dec 2018 at 08:29, François Dumont <frs.dum...@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.