Почему вывод шаблонных аргументов не работает в этом примере (из 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)конструктор?

0 ответов

Другие вопросы по тегам