Ответы на вопрос как избежать выполнения заказа undefined для конструкторов при использовании std:: make_tuple привели к обсуждению, в ходе которого я узнал, что порядок конструктивных аргументов может быть гарантирован для конструкторов: с помощью списка braced-init список будет гарантированно оставлен вправо:
T{ a, b, c }
Выражения a
, b
и c
оцениваются в данном порядке. Это имеет место, даже если тип T
имеет только определенный конструктор.
Ясно, что не все, что называется, является конструктором, и иногда было бы неплохо гарантировать порядок оценки при вызове функции, но нет такой вещи, как brace-argument-list для вызова функции с определенным порядком оценки их аргументы. Возникает вопрос: могут ли гарантии для конструкторов использовать функцию вызова функций ( "function_apply()
" ) с гарантией заказа для оценки аргументов? Допустимо требовать вызова функционального объекта.