これは、理論的には、C++実装が2つの関数の引数の評価を並列化できるかどうかのフォローアップのようなものです。
次のC++11プログラムがあるとします。
#include <cstdio>
using std::printf;
int g() { printf("1\n"); printf("3\n"); return 2; }
int h() { printf("2\n"); printf("4\n"); return 3; }
void f(int a, int b) { printf("%i\n", a+b); }
int main() { f(g(), h()); }
確かに、次の出力が観察可能です。
1 3 2 4 5
2 4 1 3 5
1 2 3 4 5はどうですか?
(私が知る限り、唯一の制約は、1が3の前にシーケンスされ、2が4の前にシーケンスされ、3と4の両方が5の前にシーケンスされることです。)