Почему вывод шаблонных аргументов не работает в этом примере (из A Tour of C++, 6.2.3 Template Argument Deduction)?
Следующий пример скопирован из книги A Tour of C++ (6.2.3 Вывод аргументов шаблона).
template<typename T>
class Vector {
public:
Vector(int);
Vector(initializer_list<T>); //initializer-list constructor
//...
};
Vector<int> v3(1); //here we need to be explicit about the element type (no element type is mentioned)
Если вы используете
Vector v3(1)
вместо этого вы получаете следующие ошибки компиляции (MSVC2019, с /std:c++latest):
- E0289: no instance of constructor "Vector" matches the argument list.
- C2641: cannot deduce template arguments for 'Vector'.
- C2783: 'Vector<T> Vector(int)': could not deduce template arguments for 'T'
- C2784: 'Vector<T> Vector(Vector<T>)': could not deduce template arguments for 'Vector<T>' from 'int'.
- ...
Я не понимаю, почему это
no element type is mentioned
часть актуальна здесь. Если вы пишете
auto i(1);
, тип элемента также не упоминается, но
i
установлен тип
int
. В
Vector v3(1);
почему компилятор не может также пойти и использовать
Vector(int)
конструктор?