QuestionSuppose we have two sorts of classesan input class Inputdefines a type result_typedefines set(result_type)an output class Outputdefines a type result_typedefines result_type get() consthas a number of Input classes as member variables, on which its output dependsGiven an output class and several input classes (arbitrary number),  consider the following procedure:loop over each input class and call set() with an appropriate value (defined beforehand)call the get() on the ouput class and collect the result.This procedure can be seen as a call to a function taking the input's  values as arguments an returning the output value.Write the functor that constructs such a variadic function in the general case.Constraints are: C++ (most likely C++11), arbitrary number of input  classes of possibly different Input::result_types. Note that  Input::result_type is not necessarily related to  Output::result_type. Aim should first be efficiency, but there's a  big bonus if the code is elegant and readable.Details: For those who wonder how Output is related to Input, one could imagine that Input has a result_type get() const method  as well, which returns whatever you provided via set(). Output  then has a constructor that takes various Inputs, and stores them  (or their reference) as member variables. Output::get() then does  some math by using the return values of its input's get() methods,  and returns some result of type Output::result_type.Proposed solution#include <functional>template <class Output, class... Inputs>std::function<typename Output::result_type(typename Inputs::result_type...)>make_function(const Output& output, Inputs&... inputs) {  return[&](typename Inputs::result_type... input_vals) {    int dummy[]{0, (inputs.set(input_vals),0)...};    return output.get();  };}The int dummy[] line is due to @ecatmur's answer.
Most elegant variadic functor
c++;c++11;variadic