Re: unresolved overloaded function type
От: Андрей Тарасевич Беларусь  
Дата: 02.02.22 17:16
Оценка: 148 (3) +2
Здравствуйте, SergH, Вы писали:

SH>Так и должно быть? Можно как-то просто объяснить, почему?


Шаблонная лямбда порождает нешаблонный класс с шаблонным методом `operator ()`. Ключевой момент тут в том, что тип лямбды, т.е. самого closure-объекта — не шаблонный. Таким образом при вызове функции

test([](auto x, auto y) { func(x, y);});


никаких трудностей с дедукций шаблонного параметра `F` у компилятора не возникает — он сразу определен однозначно. Дедукция `auto` для вашей лямбды будет делаться позже совсем в другом месте — в точке вызова `operator ()`, то есть в точке `f(1, 2);`, где все тоже однозначно.

Для варианта

test(func);


ситуация совсем иная — дедукция всех шаблонных аргументов (и `F` для `func` и `T` для `test`) должна быть сделана немедленно в этой точке. А это невозможно.
Best regards,
Андрей Тарасевич
Отредактировано 02.02.2022 19:16 Андрей Тарасевич . Предыдущая версия . Еще …
Отредактировано 02.02.2022 17:32 Андрей Тарасевич . Предыдущая версия .
Отредактировано 02.02.2022 17:19 Андрей Тарасевич . Предыдущая версия .
Отредактировано 02.02.2022 17:18 Андрей Тарасевич . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.