История изменений
Исправление victor79, (текущая версия) :
Получается, что при авто выводе типов конструирования не происходит, несмотря на наличие подходящего конструктора.
pair<int,int> ab2 = {5,3}; // так работает
pair<auto,auto> ab3 = pair(5,3); // и так работает,
// pair<auto,auto> ab1 = {5,3}; // а так не работает
// pair<auto,auto> ab(5,3); // и так не работает.
И поэтому, шаблонизированная function в параметре не конструируется из лямбды при вызове. Только если function будет явно сконструирована при вызове:
fn( std::function([](int){}) );
В принципе вопрос закрыт, чуть позже еще допишу упомянутые здесь варианты.
Исходная версия victor79, :
Получается, что при авто выводе типов конструирования не происходит, несмотря на наличие подходящего конструктора.
pair<int,int> ab2 = {5,3}; // так работает
pair<auto,auto> ab3 = pair(5,3); // и так работает,
// pair<auto,auto> ab1 = {5,3}; // а так не работает
И поэтому, шаблонизированная function в параметре не конструируется из лямбды при вызове. Только если function будет явно сконструирована при вызове:
fn( std::function([](int){}) );
В принципе вопрос закрыт, чуть позже еще допишу упомянутые здесь варианты.