Почему компилятор не может автоматически вывести тип шаблона класса?
Есть вот такой код
template <typename T, typename U>
class A
{
public:
explicit A(U v) : field1{}, field2(v) {}
private:
T field1;
U field2;
};
int main()
{
A<int> b("");
}
Собирается clang14, 17 стандарт. Получаю ошибку компиляции error:
too few template arguments for class template 'A'
Почему компилятор автоматически не выводит тип?
Ответы (1 шт):
Автор решения: HolyBlackCat
→ Ссылка
Для шаблонов классов, в отличие от функций, выводятся или все шаблонные аргументы, или никакие. Если указать хотя бы один аргумент, то остальные не будут выводиться.
Это обходят так:
template <typename T> struct tag {};
template <typename T, typename U>
class A
{
public:
explicit A(tag<T>, U v) : field1{}, field2(v) {}
private:
T field1;
U field2;
};
int main()
{
A b(tag<int>{}, "");
}