Bonjour,
Je me demande pourquoi mes compilateurs (gcc 4.3, et cl de visual c++ 2005) m'instancie cette fonction :
dans ce cas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 void f(int & val) { std::cout << val << std::endl; }
Forcément, avec cette instanciation le code ne peux pas compiler.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 #include <iostream> template<typename T> void f(T & val) { std::cout << val << std::endl; } int main() { f(int(0)); }
Pourquoi le compilateur n'instancie pas cette fonction quand on lui passe un temporaire ?
Avec ce comportement, mes compilateurs m'obligent à fournir deux versions de fonction template pour gérer le cas du temporaire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 void f(int const & val) { std::cout << val << std::endl; }
Y'a t il un moyen de factoriser ce genre de code ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 template<typename T> void f(T & val) { std::cout << val << std::endl; } template<typename T> void f(T const & val) { std::cout << val << std::endl; }
ps : ma fonction f n'est qu'un exemple ultra simplifié ... et effectivement dans ce cas précis la version const suffirait, mais ma question porte sur le cas général
Partager