Используя умные методы SFINAE, действительно было бы возможно иметь атомарный non-throwing pop_and_move () только для типов данных, которые реализуют движение без броска или без броска.
Существует даже конструкция noexcept (), позволяющая увидеть, может ли что-то сработать.
Одна из новых концепций в C ++ 11, в частности, расширяющая SFINAE, заключается в том, что если тело не компилируется, функция не существует. Таким образом, можно реализовать на основе noexcept ().
Я бы сказал, что для обратной совместимости функция будет нуждаться в новом имени, что позволяет ей сосуществовать с существующей функциональностью, вызывая их отдельно, не ломая контейнеры типов, которые не имеют семантики, позволяющей это сделать.