次のコードを検討してください。
template<class T>
size_t f(T t, size_t& x) { return x++; }
template<class... Args>
void g(Args... args)
{
size_t x = 0;
size_t y[] = { f(args, x)... };
for (size_t i = 0; i < sizeof...(args); i++)
assert(y[i] == i);
}
C++11 標準によってアサートが発生しないことが保証されていますか? なぜですか、そうでないのですか?