Вы что-то упускаете: это действительно не имеет ничего общего с итераторами. Порядок, в котором оцениваются аргументы функции, не указан. Таким образом, ваше: append(i1, ++i1);
будет зависеть от неопределенного поведения, независимо от типа i1
. Просто, например, учитывая что-то намного проще, как:
void print(int a, int b) {
std::cout << a << " " << b << "\n";
}
int main() {
int a =0;
print(a, ++a);
return 0;
}
Ваш вывод вполне может быть «0 1», который вы ожидаете, но также вполне может быть: «1 1». Поскольку это не определено, он может измениться от одной версии компилятора к другой, или даже с тем же компилятором, когда вы меняете флаги, или (теоретически) может меняться в зависимости от фазы луны ...