Après avoir regardé sur la doc du C++,

Spécialisation des template dans les cours et tutoriels C++ : http://cpp.developpez.com/cours/


La faq sur les prédicats et les foncteurs:
http://c.developpez.com/faq/cpp/?page=STL#STL_predicate

Et même le code source de la librairie standard: voir tout en bas

J'ai beau essayer j'arrive toujours pas à spécialiser un template de prédicat comme celui-ci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <functional>
template <>
struct std::greater< int >
{
//	bool operator()( const int x, const int y) const
//	{
//		return ( x > y );
//	}
};
 
int main(int argc, char *argv[])
{
	return 0;
}
Même en commentant l'intérieur ca passe pas. L'erreur du compilateur (g++) est très précis
greater.cpp:3: erreur: specialization of «template<class _Tp> struct std::greater» in different namespace

Mais je vois pas ce qu'il attend.

Alors pour référence, j'essaye de zieuter dans le code source du fichier qui définit le greater (bits/stl_function.h), remarquez c'est défini dans l'espace std.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
 
namespace std
{
// Ca c'est la définition du binary_function .. voir plus bas pour le greater
template <class _Arg1, class _Arg2, class _Result>
    struct binary_function
    {
      typedef _Arg1 first_argument_type;   ///< the type of the first argument
                                           ///  (no surprises here)
 
      typedef _Arg2 second_argument_type;  ///< the type of the second argument
      typedef _Result result_type;         ///< type of the return type
    };
// Et la définition du greater
template <class _Tp>
    struct greater : public binary_function<_Tp, _Tp, bool>
    {
      bool
      operator()(const _Tp& __x, const _Tp& __y) const
      { return __x > __y; }
    };
} // namespace std;
J'avoue la source du stl_function.h copié/collé ca sert a rien...

Edit: par contre j'ai trouvé un post que j'ai oublié de glisser ici, qui parle de la même chose et qui utilise une syntaxe similaire.
http://www.developpez.net/forums/sho...d.php?t=238181