请考虑以下代码:
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标准保证的断言不会触发吗?为什么或为什么不呢?
答案 0 :(得分:7)
是的,保证不会开火。请参阅以下引号:
§14.5.3可变参数模板:
包扩展可以在初始化列表中发生;模式是 初始化子句。
§8.5.1聚合:
初始化子句中的完整表达式在 它们出现的顺序。