LINUX.ORG.RU

История изменений

Исправление 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){}) );

В принципе вопрос закрыт, чуть позже еще допишу упомянутые здесь варианты.