Bonjour,

Je tourne en rond depuis plusieurs heures sans trouver la solution. Je n'arrive pas à compiler le morceau de code ci-dessous

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
24
25
26
#include <tr1/memory>
 
class A {};
 
using ::std::tr1::shared_ptr;
 
template <class T>
struct Deleter {
  void operator()(T *t) {
    delete t;
  }
};
 
template <class T>
Deleter<T> *deleter(const shared_ptr <T> & p) {
  return std::tr1::get_deleter<Deleter<T> >(p);
}
 
int main () {
  shared_ptr <A> p (new A, Deleter<A>());
  Deleter<A> *d1 = std::tr1::get_deleter<Deleter<A> >(p);
  assert(d1);
  Deleter<A> *d2 = deleter<A>(p);
  assert(d2);
  return 0;  
}
J'utilise g++ 4.0.1 et voici l'erreur que j'ai. Je n'ai actuellement pas la possibilité de tester avec un autre compilateur.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
g++ -Wall -pedantic -o memory memory.cpp
memory.cpp: In function 'Deleter<T>* deleter(const std::tr1::shared_ptr<_Tp>&)':
memory.cpp:16: error: 'get_deleter' is not a member of 'std::tr1'
memory.cpp:16: error: expected primary-expression before '>' token
Le problème que je vois est que get_deleter est une fonction template amie de shared_ptr mais je ne sais pas comment m'en sortir. Je suis juste arrivé à un moment à compiler avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
return std::tr1::shared_ptr<T>::template get_deleter<Deleter<T> >(p);
mais je n'avais pas encore mis dans le main les lignes avec d2.

Si quelqu'un a une idée, il est le bienvenu. Merci d'avance,