Bonjour,
Je suis tombé récemment sur le problème suivant, je me suis dit que j’allais en faire profiter un peu tout le monde. Je n’avais jamais rencontré ce besoin auparavant. Je suis preneur aussi d’une explication sur le pourquoi de la correction, car celle-là, je ne l’ai pas comprise.
Bref, le code suivant ne compile pas : que faut-il pour le corriger (solution demain soir si – mais j’en doute – personne n’a trouvé).
Bien évidemment, ce code ne fait rien : il sert seulement à reproduire l’erreur que j’avais (et la correction a y apporter). Le but est bien d’appeler la fonction A.func, avec comme paramètre template le type de retour de la fonction f.
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
27
28 int f1() { return 2; } template<class Func, class T> void f(Func f, T& a) { a.func<decltype(f())>(); } struct A { template<typename T> T func(); }; template<typename T> T A::func() { return T(); } int main() { A a; f(f1, a); return 0; }
Partager