boost::mpl::sort で任意のソート

[お題]
boost::mpl::sort を任意の値でソートしたい

#include <boost/mpl/vector.hpp>
#include <boost/mpl/sort.hpp>
#include <boost/mpl/equal.hpp>
#include <boost/mpl/reverse.hpp>
#include <boost/mpl/greater.hpp>

namespace mpl = boost::mpl;

typedef mpl::vector<float, double, char, int> source;
typedef mpl::vector<char, float, int, double> expected;

template<typename T, typename U>
struct less_size{
    typedef mpl::bool_<(sizeof(T) < sizeof(U))> type;
};

typedef boost::mpl::sort<
    source, less_size<mpl::_1, mpl::_2>
>::type result;

BOOST_MPL_ASSERT(( mpl::equal<result, mpl::reverse<expected>::type> ));

int
main(){}


boost::mpl::sort の第二引数に比較を行う template クラスを渡せば、任意のソートすることが出来ます。
思ったよりも簡単に実装する事が出来ました。


ちなみにアキラ先生の模範解答はこんな感じです。
勝手に載せちゃってスミマセン……
う〜ん、わたしよりも全然スマート。


[boost]
ver 1.45.0
[参照]
http://www.boost.org/doc/libs/1_45_0/libs/mpl/doc/refmanual/refmanual_toc.html