theShockWave I work at a firm named Koslow | ptitchep a écrit :
 
 
 Apparemment Le standard C (je pense que c'est le même en C++) dit que les arguments sont évalués de droite à gauche, ce qui est cohérent avec mon résultat.
 Problème résolu comme ceci, mais c'est encore moins lisible:
  Code :
 - #include <iostream>
 - #include <tuple>
 - static int i(0);
 - template <typename T>
 - T getOneElement() {
 -     return static_cast<T>(i++);
 - }
 - template <typename T>
 - std::tuple<T> test()
 - {
 -     return std::make_tuple(getOneElement<T>());
 - }
 - template <typename T, typename T2, typename... Data>
 - std::tuple<T, T2, Data...> test()
 - {
 -     std::tuple<T> head = std::make_tuple(getOneElement<T>());
 -     std::tuple<T2, Data...> tail = test<T2, Data...>();
 -     return std::tuple_cat(head, tail);
 - }
 - int main(int argc, char ** argv)
 - {
 -     std::tuple<double, double, float, int> t4(test<double, double, float, int>());
 -     std::cout<<std::get<0>(t4)<<" "<<std::get<1>(t4)<<" "<<std::get<2>(t4)<<" "<<std::get<3>(t4)<<std::endl;
 -     return 0;
 - }
 
  |  
 
 
   |  
 
   Tu parles de l'ordre d'évaluation des arguments lors d'un appel à une fonction, ici, c'est un cas très différent, c'est pour ca que je t'encourageais à regarder ce que le standard dit spécifiquement à propos de make_tuple.
     ---------------
			 last.fm
    |