Есть ли где-нибудь невысказанный контекст, о котором я не знаю ??И как это можно исправить?
Проблема в том, что вы не можете передать имя функции шаблона в качестве аргумента функции
template<typename... T>
auto make(T&...){
return std::make_tuple(A<T>{}...);
}
// ...
auto a = invoke(make, std::make_tuple(A<int>{}, A<double>{}));
Попробуйте переписать make()
как универсальную (и вариационную) лямбду (то есть объект, чтобы вы могли передать ее в качестве аргумента функции)
auto a = invoke([](auto & ... rData){ return std::make_tuple(A<decltype(rData)>{}...);},
std::make_tuple(A<int>{}, A<double>{}));
Выкл. Тема: переименуйте invoke()
с другимname (myInvoke()
, в качестве примера), чтобы уменьшить риск конфликта имен с std::invoke()
.