Bonjour,

J'ai comme un problème pour définir un pointeur sur une fonction membre templatée et dont la signature fait intervenir des arguments variadiques.

Ci-dessous un code simplifié au maximum et qui illustre le problème rencontré:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
struct B {};
struct A {
  template<typename T, typename... Args>
  bool update(Args&&... args) { }
};
Exemple d'usage:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
A a;
a.update<B>(); // pas de problème
a.update<B>(3.14); // pas de problème
Maintenant je voudrais obtenir le fameux pointeur sus-mentionné.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
// équivalent de a.update<B>();
bool (A::*f)() = &A::template update<B>; // ok
 
// équivalent de a.update<B>(3.14);
// PAS OK:
bool (A::*f)(double) = &A::template update<B,double>;
// PAS BON NON PLUS:
auto f = static_cast<bool (A::*)(double)>(&A::template update<B,double>);
gcc (4.8) ou clang (3.4) me disent qu'ils ne trouvent pas de matches pour la fonction membre lors de la définition du pointeur f, et que le candidat est bien-sur bool A::update(Args&&... args)

Si quelqu'un a une idée, je suis preneur. J'ai également essayé avec decltype mais sans succès.
Merci.