Шаблонный параметр для std::function

Есть метод шаблонного класса, который в качестве параметра принимает std::function с шаблонным параметром.

#include <functional>

template<typename T>
class A
{
public:
    void foo(std::function<void(T&)> func)
    {
        T t = 0;
        func(t);
    }
};

int main()
{
    A<int> a;
    a.foo([]<typename T>(T& t)
    {
        //some code
    });
}

В main пытаюсь вызывать этот метод, но компилятор выдаёт ошибки:

main.cpp: In instantiation of ‘main()::<lambda(T&)> [with T = int]’:
/usr/include/c++/12.1.0/type_traits:2565:26:   required by substitution of ‘template<class _Fn, class ... _Args> static std::__result_of_success<decltype (declval<_Fn>()((declval<_Args>)()...)), std::__invoke_other> std::__result_of_other_impl::_S_test(int) [with _Fn = main()::<lambda(T&)>&; _Args = {int&}]’
/usr/include/c++/12.1.0/type_traits:2576:55:   required from ‘struct std::__result_of_impl<false, false, main()::<lambda(T&)>&, int&>’
/usr/include/c++/12.1.0/bits/std_function.h:348:9:   recursively required by substitution of ‘template<class _Result, class _Ret> struct std::__is_invocable_impl<_Result, _Ret, true, std::__void_t<typename _CTp::type> > [with _Result = std::__invoke_result<main()::<lambda(T&)>&, int&>; _Ret = void]’
/usr/include/c++/12.1.0/bits/std_function.h:348:9:   required from ‘struct std::function<void(int&)>::_Callable<main()::<lambda(T&)>, main()::<lambda(T&)>, std::__invoke_result<main()::<lambda(T&)>&, int&> >’
/usr/include/c++/12.1.0/bits/std_function.h:353:8:   required by substitution of ‘template<class _Res, class ... _ArgTypes> template<class _Cond, class _Tp> using _Requires = std::__enable_if_t<_Cond::value, _Tp> [with _Cond = std::function<void(int&)>::_Callable<main()::<lambda(T&)>, main()::<lambda(T&)>, std::__invoke_result<main()::<lambda(T&)>&, int&> >; _Tp = void; _Res = void; _ArgTypes = {int&}]’
/usr/include/c++/12.1.0/bits/std_function.h:434:9:   required by substitution of ‘template<class _Functor, class _Constraints> std::function<void(int&)>::function(_Functor&&) [with _Functor = main()::<lambda(T&)>; _Constraints = <missing>]’
main.cpp:18:10:   required from here

Как было бы правильно реализовать подобное? UPD: мне кажется, оно не очень хочет принимать шаблон тут: a.foo([]<typename T>(T& t)


Ответы (1 шт):

Автор решения: user509700

Вместо шаблона в параметрах лямбды можно напрямую передать int

int main()
{
    A<int> a;
    a.foo([](int& t)
    {
        //some code
    });
}
→ Ссылка