#include <functional>
#include <iostream>
template <typename T, typename F = std::less<T>>
int compare(const T &v1, const T &v2, F f = F())
{
if (f(v1, v2)) return -1;
if (f(v2, v1)) return 1;
return 0;
}
template <class T = int> class Numbers {
public:
Numbers(T v = 0): val(v) { }
// various operation on numbers
private:
T val;
};
int main()
{
std::cout << compare(1, 2) << std::endl;
Numbers<long double> lots_of_precision;
Numbers<> average_precision;
return 0;
}
// from C++ primer 5th(p.670, p.671)
// g++ xx.cpp -std=c++11
// gcc 4.9.2