Поскольку msg_formatter
является шаблоном, аргументы шаблона должны быть предоставлены в возвращаемом типе, но, поскольку вы не знаете тип, который будет передан, вам необходим другой уровень косвенности. Если у вас есть C ++ 14, вы можете вернуть лямбду из функции, используя auto
вычет типа возврата:
auto formatter() {
return [](const string&, auto const&...) {/*...*/};
}
Если у вас operator() и вернуть ее вместо этого.