template CompareChain MakeCompareChain( const typename CompareChain::CompareFunctor& f1 ) { return CompareChain( f1 ); } template CompareChain MakeCompareChain( const typename CompareChain::CompareFunctor& f1, const typename CompareChain::CompareFunctor& f2 ) { return CompareChain( f1, f2 ); } template CompareChain MakeCompareChain( const typename CompareChain::CompareFunctor& f1, const typename CompareChain::CompareFunctor& f2, const typename CompareChain::CompareFunctor& f3 ) { return CompareChain( f1, f2, f3 ); } template CompareChain MakeCompareChain( ComparisonResult ( *f1 )( const T&, const T& ) ) { return CompareChain( boost::bind( f1, _1, _2 ) ); } template CompareChain MakeCompareChain( ComparisonResult ( *f1 )( const T&, const T& ), ComparisonResult ( *f2 )( const T&, const T& ) ) { return CompareChain( boost::bind( f1, _1, _2 ), boost::bind( f2, _1, _2 ) ); } template CompareChain MakeCompareChain( ComparisonResult ( *f1 )( const T&, const T& ), ComparisonResult ( *f2 )( const T&, const T& ), ComparisonResult ( *f3 )( const T&, const T& ) ) { return CompareChain( boost::bind( f1, _1, _2 ), boost::bind( f2, _1, _2 ), boost::bind( f3, _1, _2 ) ); }