Paramètre pack d'extension est renversée par la VS2015 compilateur.
J'ai le code suivant:
#include <iostream>
#include <vector>
template <typename... T>
void f_Swallow(T &&...)
{
}
template <typename... T>
std::vector<int> f(T ...arg)
{
std::vector<int> result;
f_Swallow
(
[&]()
{
result.push_back(arg);
return true;
}
()...
) ;
return result;
}
using namespace std;
int main()
{
auto vec = f(1,2,3,4);
for (size_t i = 0; i < vec.size(); ++i)
cout << vec[i] << endl;
}
Lorsque j'exécute ce code dans XCode (clang-700.1.81), j'obtiens ce résultat:
1
2
3
4
Mais le même code à exécuter dans VS2015 produit de cette sortie:
4
3
2
1
Pourquoi le paramètre packs élargi différemment selon le compilateur? Est-il un moyen de le fixer sans vérification de la plate-forme et la version de compilateur? N'a pas la garantie standard de rien à propos de l'expansion de l'ordre?