C++03のstd::queueとstd::stackがもつpop()メンバ関数は、要素型Tのコピーコンストラクタが例外を投げた場合に、削除がすでに済んでいるせいでコンテナが壊れてしまう、という例外安全性の問題があるために戻り値の型がvoidになっていました。 C++11にはムーブとnoexceptがあるので、要素型Tが例外を投げないムーブコンストラクタを持っていれば、戻り値を返すpop()が書けるのではないかと思います。 書いてみました。 #include <queue> #include <type_traits> template <class T, class Container = std::deque<T>> class movable_queue : public std::queue<T, Container> { using base = std::queue<T, Co