Невозможно вывести параметр шаблона из зависимой области
Я хочу вызвать функцию шаблона с выведенным вторым параметром шаблона. Функция шаблона опирается на два типа шаблона и принимает их аргумент и типы возвращаемых значений из зависимой области. Рассмотрим следующий пример:
struct A
{
struct S
{
int a;
int b;
};
int c;
};
struct B
{
struct S
{
int a;
int b;
};
int c;
};
template <typename T, typename U>
typename T::S foo(const typename U::S& us)
{
typename T::S ts;
if (us.a > 0)
ts.a = 1;
else
ts.a = 0;
return ts;
}
int main()
{
B::S bs;
bs.a = 0;
auto as = foo<A,B>(bs); // works
auto as = foo<A>(bs); // couldn't deduce template parameter 'U'
std::cout << as.a;
}
Я получаю следующую задачу дедукции:
prog.cc:27:15: note: candidate: 'template<class T, class U> typename T::S foo(const typename U::S&)'
27 | typename T::S foo(const typename U::S& us)
| ^~~
prog.cc:27:15: note: template argument deduction/substitution failed:
prog.cc:42:24: note: couldn't deduce template parameter 'U'
42 | auto as = foo<A>(bs);
|