关于如何在使用std :: make_tuple时避免构造函数的未定义执行顺序的问题的答案导致了一个讨论,在此期间我了解到构造函数可以保证参数评估的顺序:使用braced-init-list命令保证从左到右:
T{ a, b, c }
Run Code Online (Sandbox Code Playgroud)
表达式a,b和c,按给定的顺序进行评估.即使类型T只定义了普通的构造函数,也是如此.
显然,并非所有被调用的都是构造函数,有时候在调用函数时保证求值顺序会很好,但是没有像brace-argument-list这样的东西来调用函数,并且定义了对它们的参数的评估顺序.问题变成:构造函数的保证是否可以用于构建函数调用工具(" function_apply()"),并具有用于评估参数的排序保证?要求调用函数对象是可以接受的.
例如
template<typename... Ts>
LastTypeOfTs f();
Run Code Online (Sandbox Code Playgroud)
如何返回最后一种可变参数模板?