Мне интересно следующее:
void f(int a, int b) { }
int a(int x) { std::cout << "func a" << std::endl; return 1; }
int b(int x) { std::cout << "func b" << std::endl; return 2; }
int x() { std::cout << "func x" << std::endl; return 3; }
int y() { std::cout << "func y" << std::endl; return 4; }
f(a(x()), b(y()));
После прочтения http://en.cppreference.com/w/cpp/language/eval_order Мне все еще трудно понять, возможен ли следующий порядок оценки:
x()
→ y()
→ a()
→ b()
или что стандарт гарантирует, что a(x())
и b(y())
будут оцениваться как единицы, так сказать.
Другими словами, есть ли возможность распечатать
func x
func y
func a
func b
Выполнение этого теста на GCC 5.4.0 дает мне разум более логичным
func y
func b
func x
func a
но это, конечно, не говорит мне ничего о том, что требует стандарт. Было бы неплохо получить ссылку на стандарт.