可変長テンプレートの展開と引数の評価順序についての疑問。
class my_vector
: private std::vector<int>
{
template <std::size_t... Index>
void func_1_(std::index_sequence<Index...>)
{
int n[] = { 0, (static_cast<void>(push_back(Index)), 0)... };
}
template <std::size_t... Index>
void func_2_(std::index_sequence<Index...>)
{
[](auto&&...){}((static_cast<void>(push_back(Index)), 0)...);
}
public:
template <std::size_t N>
void func_1()
{
func_1_(std::make_index_sequence<N>{});
}
template <std::size_t N>
void func_2()
{
func_2_(std::make_index_sequence<N>{});
}
using std::vector<int>::begin;
using std::vector<int>::end;
using std::vector<int>::clear;
};
int main()
{
my_vector v;
for(auto& i : v)
{
std::cout << i;
}
v.func_1<10>();
for(auto& i : v)
{
std::cout << i;
}
std::cout << std::endl;
v.clear();
for(auto& i : v)
{
std::cout << i;
}
v.func_2<10>();
for(auto& i : v)
{
std::cout << i;
}
std::cout << std::endl;
}
このように出力されました。
0123456789
9876543210
こう出力されると想定していました。
0123456789
0123456789
どうして2行目の出力がそうなるのか教えて欲しいです。