Je me suis toujours demandé pourquoi vous ne pouvez pas utiliser localement les classes définies comme des prédicats à des algorithmes de la STL.
À la question: Approche algorithmes de la STL, lambda, classes locales et d'autres approches, BubbaT mentionne dit que"Depuis la norme C++ interdit locaux types à être utilisés comme arguments'
Exemple de code:
int main() {
int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
std::vector<int> v( array, array+10 );
struct even : public std::unary_function<int,bool>
{
bool operator()( int x ) { return !( x % 2 ); }
};
std::remove_if( v.begin(), v.end(), even() ); // error
}
Personne ne sait où la norme est la restriction? Quelle est la raison pour rejeter des types locaux?
EDIT: Depuis C++11, il est légal d'utiliser un type local comme un argument de modèle.