Учитывая следующий вызов функции:
f(g(), h())
так как порядок оценки аргументов функции неуточнен (по-прежнему имеет место в С++ 11, насколько мне известно), может ли теоретически выполнить параллельную реализацию g()
и h()
?
Такая распараллелизация могла бы только ударить, были g
и h
, как известно, довольно тривиальными (в наиболее очевидном случае - доступ только к локальным данным к их телам), чтобы не вводить проблемы concurrency, но кроме это ограничение я не вижу ничего, чтобы его запретить.
Итак, позволяет ли стандарт? Даже если только по правилу as-if?
(В этот ответ, Mankarse утверждает иначе, однако он не цитирует стандарт, и мой прочтение [expr.call]
не имеет показала любую очевидную формулировку.)