Salut,
En préparant une réponse à cette discussion, j'ai été confronté à un comportement qui me semble étrange de la part de gcc...
En effet, si j'exécute le code
l'exécution s'arrpête après avoir utiliser l'argument "salut", en me disant qu'il reste 2 arguments inutilisés.
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
29 #include <string> #include <iostream> template<typename ...Args> void foo(Args ... args) { std::cout<<"stopping with "<<sizeof...(args)<< " unused arguments"<<std::endl; } template<typename ...Args> void foo(int i, Args ... args) { std::cout<<"using i = "<<i <<", left "<<sizeof...(args)<<" argument more"<<std::endl; foo(args...); } template<typename ... Args> void foo(std::string const & s, Args...args) { std::cout<<"using the "<<s<<" string, left " <<sizeof...(args)<<" argument more"<<std::endl; foo(args...); } int main() { foo<int, int,int, int, std::string , int, int >(1, 2, 3, 4,5 , "salut", 6, 7 ); return 0; }
Par contre, si je rajoute une déclaration des fonctions sous la forme de
l'exécution va jusqu'à son terme...
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
29
30
31
32 #include <iostream> #include <string> template<typename ...Args> void foo(int i, Args ... args); template<typename ...Args> void foo(std::string const & s, Args...args); template<typename ...Args> void foo(Args ... args) { std::cout<<"stopping with "<<sizeof...(args)<< " unused arguments"<<std::endl; } template<typename ... Args> void foo(std::string const & s, Args...args) { std::cout<<"using the "<<s<<" string, left " <<sizeof...(args)<<" argument more"<<std::endl; foo(args...); } template<typename ...Args> void foo(int i, Args ... args) { std::cout<<"using i = "<<i <<", left "<<sizeof...(args)<<" argument more"<<std::endl; foo(args...); } int main() { foo<int, int,int, int, std::string , int, int >(1, 2, 3, 4,5 , "salut", 6, 7 ); return 0; }
Je me serais pourtant attendu, étant donné que la définition de fonction vaut déclaration, à ce que le premier code fonctionne correctement !!!
Alors, selon vous, aurais-je loupé quelque chose, ou s'agit-il d'un bug de gcc
Partager