Je me suis toujours demandé pourquoi vous ne pouvez pas utiliser les classes définies localement comme prédicats aux algorithmes STL.Utilisation de classes locales avec des algorithmes STL
Dans la question suivante: Approaching STL algorithms, lambda, local classes and other approaches, BubbaT mentionne dit que 'Depuis le standard C++ interdit les types locaux à utiliser comme arguments'
Exemple 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
}
Est-ce que quelqu'un sait où dans le la norme est la restriction? Quelle est la raison d'interdire les types locaux?
EDIT: Depuis C++ 11, il est légal d'utiliser un type local comme un argument de modèle.
Je sais, mais j'aimerais savoir où je peux comprendre pourquoi. Avez-vous une référence dans la norme? –
Faites-vous référence à 14.3.1.2, "arguments de type template"? – greyfade
J'ai ajouté quelques informations et un lien qui pourrait aider. En résumé, la restriction était une erreur qui aurait été corrigée rapidement si la norme évoluait plus vite ... – Klaim