When you write inputs.push_back(std::make_pair("group0", {1, 2, 3, 4})) , you ask make_pair to infer the types of both of its arguments. But the second argument, the init-list bit, is not an expression, so it has no type. Therefore, the output of the template argument is not performed.
The simplest solution is to remove the make_pair call and use the list-bit in all versions.
inputs.push_back({"group0", {1, 2, 3, 4}});
Now the list initialization lists the available constructors and calls the pair constructor with an external pair of arguments, and the vector constructor for the internal copied initialization list.
source share