Расширение пакета параметров отменяется компилятором VS2015.
У меня есть следующий код:
#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;
}
Когда я запускаю этот код в XCode (clang-700.1.81), я получаю этот результат:
1
2
3
4
Но тот же самый код в VS2015 производит этот вывод:
4
3
2
1
Почему пакеты параметров расширяются по-разному в зависимости от компилятора? Есть ли способ исправить это, не проверяя версию платформы и компилятора? Не гарантирует ли стандарт что-либо о заказе расширения?