以下の myless のようなテンプレート化された関数ではなく、less がファンクターであるのはなぜですか? 委員会がその決定を下した理由と、さらに読むにはどこに行けばよいですか? また、C++11 標準は、委員会が特定の決定を下した理由を説明していますか?
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
#if 1
template <class T> struct stdless {
bool operator() (const T& x, const T& y) const {return x<y;}
typedef T first_argument_type;
typedef T second_argument_type;
typedef bool result_type;
};
#else
#define stdless std::less
#endif
//bool myless(int a, int b) { return a<b; }
template<class T>
bool myless(T a, T b) { return a<b; }
int main()
{
vector<int> a{5, 3, 1,6};
myless(5, 6);
stdless<int>()(5, 6);
auto fn1=stdless<int>();
fn1(5,9);
auto fn2=myless<int>;
fn2(5,9);
sort(a.begin(), a.end(), myless<int>);
sort(a.begin(), a.end(), less<int>());
for(auto b=a.begin(); b!=a.end(); ++b)
cout << *b<<endl;
}