Bonjour à tous !

Je travaille sous C++Builder 6 (10.161), et je rencontre un petit problème avec la fonction remove : en effet, il existe deux fonctions portant ce nom dans le namespace std.

La première,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
int remove(const char *)
, dans cstdio (pour supprimer un fichier) ; la deuxième,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
template <class ForwardIterator, class T>
ForwardIterator remove(ForwardIterator first, ForwardIterator last,
                       const T& value);
, dans algorithm (pour enlever des élèments d'un container, ou plutôt pour les déplacer en fin de container). Or, lorsque je souhaite utiliser la fonction template, j'obtiens une erreur du compilateur, indiquant qu'il ne sélectionne pas la bonne fonction. Est-ce normal d'avoir un tel conflit ?!

Voici un code minimal qui ne compile pas :
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
#include <algorithm>
#include <cstdio>
#include <vector>
 
int main()
{
    std::vector<int> v;
 
    v.push_back(3);
    v.push_back(2);
    v.push_back(5);
 
    v.erase(std::remove(v.begin(), v.end(), 2), v.end());
 
    return 0;
}
Et l'erreur qu'il donne :
[C++ Erreur] test_remove.cpp(13): E2034 Impossible de convertir 'int *' en 'const char *'
[C++ Erreur] test_remove.cpp(13): E2342 Mauvaise correspondance de type dans le paramètre '__path' ('const char *' désiré, 'int *' obtenu)
[C++ Erreur] test_remove.cpp(13): E2227 Paramètre supplémentaire dans l'appel à std::remove(const char *)
[C++ Erreur] test_remove.cpp(13): E2285 Impossible de trouver une correspondance pour '_STL::vector<int,_STL::allocator<int> >::erase(int,int *)'
Si quelqu'un a déjà rencontré cette erreur, ou sait à quoi elle est dûe...

Edit : J'ai essayé de compiler ce même code sous code::blocks, et il n'y a aucun problème...dois-je en déduire que c'est le compilateur borland qui fait des siennes ?