いつも色々と教えてもらってます。
下のソースがコンパイルできないのですが失敗する理由は何でしょうか?

#include <iostream>
#include <vector>
#include <functional>
#include <algorithm>
using namespace std;
template <class T>
class isEven : public unary_function<T, bool> {
public:
result_type operator()(argument_type i) {
return (result_type) !(i % 2);
}
};
int main() {
vector<int> v;
for (int i = 0; i < 10; i++) v.push_back(i);
cout << count_if(v.begin(), v.end(), isEven<int>());
return 0;
}

エラーメッセージは以下のようになりました。
$ g++ test.cpp
test.cpp:9: error: ISO C++ forbids declaration of 'result_type' with no type
test.cpp:9: error: expected ';' before 'operator'
test.cpp:12: error: expected `;' before '}' token
(一行略)
/usr/include/c++/4.2.1/bits/stl_algo.h:457:
error: no match for call to '(isEven<int>) (int&)'