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
|